How to change the value of datepicker using Selenium and Python

In a table element I have the following for a date picker:

<input name="tb_date" type="text" value="2020-07-15" onchange="javascript:setTimeout('__doPostBack(\'tb_date\',\'\')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="tb_date" class="align-center" style="font-size:14pt;width:120px;"> 

I can get the input element as follows:

date_element = driver.find_element_by_name('tb_date') 

That is fine. But when I try to change the value on this element, it seems to append to the current value.

date_element.send_keys('2020-07-01') date_element.click() 

So the datepicker has a value of '2020-07-152020-07-01'

How can I delete the value attribute and input a new one?

Add Comment
3 Answer(s)

You can clear and then sendkeys to that field.

date_element.clear(); date_element.send_keys('2020-07-01') date_element.click(); 
Add Comment

Try using .execute_script:

date_element = driver.find_element_by_name('tb_date') driver.execute_script("arguments[0].value = '2020-07-01';", date_element) 
Add Comment

The desired element is a JavaScript enabled element with _onchange_event having __doPostBack so to click on the element you have to induce WebDriverWait for the element_to_be_clickable() and you can use either of the following Locator Strategies:

  • Using NAME:

    date_element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "tb_date"))) date_element.click() date_element.clear() date_element.send_keys('2020-07-01')   
  • Using CSS_SELECTOR:

    date_element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#tb_date[name='tb_date']"))) date_element.click() date_element.clear() date_element.send_keys('2020-07-01')       
  • Using XPATH:

    date_element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='tb_date' and @name='tb_date']"))) date_element.click() date_element.clear() date_element.send_keys('2020-07-01')           
  • Note : You have to add the following imports :

    from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC 

References

You can find a couple of relevant detailed discussions in:

Answered on July 16, 2020.
Add Comment

Your Answer

By posting your answer, you agree to the privacy policy and terms of service.