Send keys not working selenium webdriver python
Question:
I need to send text to description textarea. There is some predefined text which is cleared after click. I tried to use clear() or click() before sendkeys but nothing works correctly. It will send text there but it is still grey and after saving page there is error that tere is no text in description… Can I use something else instead of send keys? Thanks
Textarea looks like:
<textarea id="manage_description" class="eTextArea" name="e.description" cols="" rows="" onfocus="clearDescHint(this);" onblur="resetDescHint(this);" style="color: grey;"></textarea>
send_keys not working
self.driver.find_element_by_id('manage_description').send_keys("TEST")
Answers:
As you mentioned send_keys("TEST")
are not working, there are a couple of alternatives to send a character sequence
to respective fields as mentioned below :
-
Use Keys.NUMPAD3
[simulating send_keys("3")
]:
login.send_keys(Keys.NUMPAD3)
-
Use JavascriptExecutor
with getElementById
:
self.driver.execute_script("document.getElementById('login_email').value='12345'")
-
Use JavascriptExecutor
with getElementsById
:
self.driver.execute_script("document.getElementsById('login_password')[0].value='password'")
Now comming to your specific issue, as you mentioned I tried to use clear() or click() before sendkeys but nothing works correctly
, so we will take help of javascript
to click()
on the text area to clear the predefined text
and then use send_keys
to populate the text field as follows:
self.driver.execute_script("document.getElementById('manage_description').click()")
self.driver.find_element_by_id('manage_description').send_keys("TEST")
Update :
As you mentioned sometimes it works sometimes not, so I would suggest the following:
- Induce
ExplicitWait
for textarea
to be clickable.
- Use
javascript
to send the text
within the textarea
too.
-
Your code will look like:
my_string = "TEST";
elem = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "manage_description")))
self.driver.execute_script("document.getElementById('manage_description').click()")
self.driver.execute_script("arguments[0].setAttribute('value', '" + my_string +"')", elem);
This code will work for sending key to every type of input box or text area
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
element = browser.find_element(By.XPATH,'*//span[text()="Price"]')
ActionChains(browser).move_to_element(element).click(element).send_keys('1200').perform()
I need to send text to description textarea. There is some predefined text which is cleared after click. I tried to use clear() or click() before sendkeys but nothing works correctly. It will send text there but it is still grey and after saving page there is error that tere is no text in description… Can I use something else instead of send keys? Thanks
Textarea looks like:
<textarea id="manage_description" class="eTextArea" name="e.description" cols="" rows="" onfocus="clearDescHint(this);" onblur="resetDescHint(this);" style="color: grey;"></textarea>
send_keys not working
self.driver.find_element_by_id('manage_description').send_keys("TEST")
As you mentioned send_keys("TEST")
are not working, there are a couple of alternatives to send a character sequence
to respective fields as mentioned below :
-
Use
Keys.NUMPAD3
[simulatingsend_keys("3")
]:login.send_keys(Keys.NUMPAD3)
-
Use
JavascriptExecutor
withgetElementById
:self.driver.execute_script("document.getElementById('login_email').value='12345'")
-
Use
JavascriptExecutor
withgetElementsById
:self.driver.execute_script("document.getElementsById('login_password')[0].value='password'")
Now comming to your specific issue, as you mentioned I tried to use clear() or click() before sendkeys but nothing works correctly
, so we will take help of javascript
to click()
on the text area to clear the predefined text
and then use send_keys
to populate the text field as follows:
self.driver.execute_script("document.getElementById('manage_description').click()")
self.driver.find_element_by_id('manage_description').send_keys("TEST")
Update :
As you mentioned sometimes it works sometimes not, so I would suggest the following:
- Induce
ExplicitWait
fortextarea
to be clickable. - Use
javascript
to send thetext
within thetextarea
too. -
Your code will look like:
my_string = "TEST"; elem = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "manage_description"))) self.driver.execute_script("document.getElementById('manage_description').click()") self.driver.execute_script("arguments[0].setAttribute('value', '" + my_string +"')", elem);
This code will work for sending key to every type of input box or text area
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
element = browser.find_element(By.XPATH,'*//span[text()="Price"]')
ActionChains(browser).move_to_element(element).click(element).send_keys('1200').perform()