How do I send a DELETE keystroke to a text field using Selenium with Python?

倾然丶 夕夏残阳落幕 提交于 2021-02-06 15:19:15

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!