25

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?

2
  • 4
    from selenium.webdriver.common.keys import Keys just for anyone else wondering how to import it. Commented Mar 1, 2019 at 17:36
  • @jmunsch added as an answer. I missed this comment. Commented Dec 13, 2019 at 16:51

7 Answers 7

28

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
Sign up to request clarification or add additional context in comments.

2 Comments

Yup, ironically I just found the answer after posting this by seeing Keys.BACKSPACE in the autosuggestion list in iPython when I typed Keys. Feeling kind of dumb right now.
@NickSweeting, Maybe you're using a Mac? The keyboard layout in the Mac make it confusing ;)
23

You can use Ctr+a to highlight the text and remove it by BACKSPACE:

from selenium.webdriver.common.keys import Keys

element.send_keys(Keys.CONTROL, 'a')
element.send_keys(Keys.BACKSPACE)

Comments

8

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)

Comments

6

Why did no one say the import required?

from selenium.webdriver.common.keys import Keys

Comments

5

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)

Comments

0

How to delete a line of text

This shortcut did not work for me Ctrl + a
But SHIFT + END worked perfectly

If the cursor is at the end of the line use SHIFT + HOME

action = ActionChains(driver)
action.key_down(Keys.SHIFT).send_keys(Keys.HOME, Keys.BACKSPACE).perform()

If the cursor is at the start of the line use SHIFT + END

action = ActionChains(driver)
action.key_down(Keys.SHIFT).send_keys(Keys.END, Keys.BACKSPACE).perform() 

Comments

0

For C# you can do with this

using seleKey = OpenQA.Selenium.Keys;
element.SendKeys(seleKey.Control+ 'a'+ seleKey.Backspace);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.