问题
How do I send a Keys.DELETE keystroke to a text field with the Selenium web tester? I'm trying to simulate the user typing in a field and then deleting what they typed to test the interactive autosuggestion feature. It should filter the list to items beginning with their query, then show all the possible suggestions again when they delete their query. Unfortunatley sending a .clear() doesn't work to un-filter the list again. Neither does send_keys('\127').
def get_suggestions():
driver.get('https://www.example.com/')
driver.find_element_by_css_selector('#searchQuery').click()
driver.find_element_by_css_selector('#searchQuery').send_keys('a')
sleep(0.5)
driver.find_element_by_css_selector('#searchQuery').send_keys(Keys.DELETE)
sleep(0.5)
for suggestion in driver.find_elements_by_css_selector('#search-form #suggestions'):
yield suggestion
How can I simulate the user pressing the delete button on their keyboard?
回答1:
You need to use Keys.BACKSPACE
instead of Keys.DELETE
if you want to delete a character before the cursor. Keys.DELETE
is used to delete a character after the cursor.
Be sure you are using the following import:
from selenium.webdriver.common.keys import Keys
回答2:
You can use Ctr+a
to highlight the text and remove it by BACKSPACE
:
element.send_keys(Keys.CONTROL, 'a')
element.send_keys(Keys.BACKSPACE)
回答3:
In python if element.clear() (doesn't fire onChange in react) doesn't work try this.
def clear_text(element):
length = len(element.get_attribute('value'))
element.send_keys(length * Keys.BACKSPACE)
回答4:
Why did no one say the import required?
from selenium.webdriver.common.keys import Keys
回答5:
I'm trying to simulate the user typing in a field and then deleting what they typed
If you are trying to delete one key at a time, then, as @falsetru mentions, using the following will delete one character at a time:
element = driver.find_element_by_css_selector('#searchQuery')
element.send_keys(Keys.BACKSPACE)
However, if you want to delete the entire search query, I would rather clear the input field.
element = driver.find_element_by_css_selector('#searchQuery')
element.click()
element.clear()
回答6:
Also, if you want to delete the entire text you can mimic the ctrl + a
& backspace
in a single function like below:
def clear_entire_text(element):
element.send_keys(Keys.CONTROL + 'a', Keys.BACKSPACE)
来源:https://stackoverflow.com/questions/27338742/how-do-i-send-a-delete-keystroke-to-a-text-field-using-selenium-with-python