6

clear() does not work in this case. I am getting append after append.
searchForMovie.clear() is not working... I have also tried to send
CTRL + 'a', and then the DELETE. Again all I got are just appends...

 for movie in allMissing:

            time.sleep (10)

            searchForMovie = WebDriverWait (driver, 10).until \
                (EC.presence_of_element_located ((By.CSS_SELECTOR, "#search-text")))  

            searchForMovie.send_keys (movie)

            # click
            enter = WebDriverWait (driver, 10).until \
                (EC.presence_of_element_located ((By.CSS_SELECTOR, "#search-submit")))  

            driver.execute_script ("arguments[0].click()", enter)


            # clear the search text box
            searchForMovie = WebDriverWait (driver, 10).until \
                (EC.presence_of_element_located ((By.CSS_SELECTOR, "#search-text")))

            searchForMovie.clear()
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
LetzerWille
  • 5,355
  • 4
  • 23
  • 26

3 Answers3

6

To clear the textbox you need to induce WebDriverWait with expected_conditions set to element_to_be_clickable, next invoke click() on the WebElement and then invoke clear() as follows :

# clear the search text box
searchForMovie = WebDriverWait (driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#search-text")))
searchForMovie.click()
searchForMovie.clear()
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
  • I got this error message, after trying your solution. The element reference of is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed – LetzerWille Mar 07 '18 at 12:28
  • 1
    Once you `searchForMovie.send_keys(movie)` and subsequently `driver.execute_script ("arguments[0].click()", enter)` the _HTML DOM_ is bound to change. So you need to come back to the same url where you started looking out for `searchForMovie = WebDriverWait (driver, 10).until \ (EC.presence_of_element_located ((By.CSS_SELECTOR, "#search-text")))` – undetected Selenium Mar 07 '18 at 12:34
  • This is not working, i tried it on Instagram login. – Jawad Ahmad Khan Jan 19 '20 at 08:54
  • So in what context does that clear() API entry point function by design? It's clearly some kind of special-casing, but not documented accessibly to us. –  Dec 08 '20 at 16:53
4

In case .clear() does not work you can try:

from selenium.webdriver.common.keys import Keys

#...your code (I was using python 3)

driver.find_element_by_id('foo').send_keys(Keys.CONTROL + "a");
driver.find_element_by_id('foo').send_keys(Keys.DELETE);
Jortega
  • 3,616
  • 1
  • 18
  • 21
3

I think it should be as easy as:

driver.execute_script("$('#search-text').val('');")

If you want to do it without jQuery, you could use plain javascript:

document.getElementById('search-text').value = '';
Esmay Kapol
  • 231
  • 3
  • 12