Cedric
Cedric

Reputation: 31

Selenium send_keys doesn't sent apostrophe

In Selenium I want to input a teststring "hello'world", but the webpage's textbox becomes "helloworld". As if the apostrophe doesn't exist. Replacing "'" by chr(39) or splitsing the string doesn't do the job either.

driver = webdriver.Chrome()
driver.get("https://google.com")
text = "hello'world"
textbox = driver.find_element_by_xpath('//* 
[@id="tsf"]/div[2]/div[1]/div[1]/div/div[2]/input')
for i in text:
    textbox.send_keys(i)
    sleep(0.1)

Upvotes: 3

Views: 1270

Answers (2)

Cedric
Cedric

Reputation: 31

Solution: Changed from Chromedriver to Firefox using geckodriver. The single and double quote seems to ge glitched in the current version of Chromedriver.

Upvotes: 0

undetected Selenium
undetected Selenium

Reputation: 193298

To send the character sequence hello'world within the search box of Google Home Page you need to induce WebDriverWait for the element_to_be_clickable() and you can use the following Locator Strategy:

  • Using CSS_SELECTOR:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    driver.get("https://google.com")
    text = "hello'world"
    textbox = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "q")))
    for i in text:
        textbox.send_keys(i)
    
  • Browser Snapshot:

apostrophe


Update

Seems previously there were some issues with the non-US keyboard settings and Unicode characters while invoking send_keys(). You can find a couple of relevant discussions in:

This issue was solved through the commit Fixing encoding of payload passed by hub to a node.

Using Selenium v3.5.3 should solve this issue.


tl; dr

Change your keyboard layout

Upvotes: 2

Related Questions