6

I'm using Python 2.7 and Selenium 2-44-0 on Windows 7. I'm looking for a quicker way of inputting text than using send_keys. Send_keys will print 1 letter at a time (which better imitates an actual user). I would like a way to print all of them out at once, as if the content was pasted.

For example, Sikuli has the following functionality:

paste("this will all populate the field at the same time")

I'm wondering if there's a way to write a method in Python that will have the same result. So, instead of:

el.send_keys("this will do 1 letter at a time")

Have something like

el.paste_keys("this will do the entire line at once")

Since the above command would require adding code to selenium functionality, it would prob make more sense to have a python method. Maybe something along the lines of:

def paste_keys(self, xpath, text):
    os.environ['CLIPBOARD'] = text
    el = self.driver.find_element_by_xpath(xpath)
    el.send_keys(Keys.CONTROL, 'v')

Using that environmental variable doesn't actually act as a 'copy', though, and I don't know how to set the clipboard from the code level without downloading 3rd party software.

user2869231
  • 1,431
  • 5
  • 24
  • 53

1 Answers1

12

This works:

from selenium.webdriver.common.keys import Keys

def paste_keys(self, xpath, text):
    os.system("echo %s| clip" % text.strip())
    el = self.driver.find_element_by_xpath(xpath)
    el.send_keys(Keys.CONTROL, 'v')

There cannot be a space after %s, for it will add that to the copied text.

dtasev
  • 540
  • 6
  • 12
user2869231
  • 1,431
  • 5
  • 24
  • 53
  • what about using the `strip()` method on the text? split isn't what you want. – Bee Smears Feb 21 '15 at 19:03
  • typo; I meant to put strip. However, it still keeps the space. It seems to be added AFTER going to the clipboard, so I'd need a way of setting the clipboard value to a variable or something so I can edit it from there – user2869231 Feb 23 '15 at 15:05
  • aha! figured it out. the line "echo %s | clip" is recognizing the space in between the %s and | as part of the text; I removed that, and there's no longer a space – user2869231 Feb 23 '15 at 15:15
  • Great. But Getting error: `NameError: name 'Keys' is not defined` – Adil Saju Jan 30 '19 at 07:01
  • 1
    @AdilSaju You might want to import Keys first `from selenium.webdriver.common.keys import Keys` – Zuabi Mar 09 '19 at 15:21
  • @user2869231 what should i enter for "self" and "text" while calling the function. If just enter the xpath , i get an error saying that positional arguments are missing.If i simply remove text and self , i get another error saying "text" not defined – Chemist Oct 02 '20 at 14:31