Как изменить значение datepicker с помощью Selenium и Python

В элементе table для выбора даты у меня есть следующее:

<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;">

Я могу получить элемент ввода следующим образом:

date_element = driver.find_element_by_name('tb_date')

Это нормально. Но когда я пытаюсь изменить значение этого элемента, кажется, что оно добавляется к текущему значению.

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

Таким образом, datepicker имеет значение '2020-07-152020-07-01'.

Как я могу удалить атрибут значения и ввести новый?


person arsenal88    schedule 15.07.2020    source источник


Ответы (3)


Вы можете очистить, а затем отправить ключи в это поле.

date_element.clear();
date_element.send_keys('2020-07-01')
date_element.click();
person Justin Lambert    schedule 15.07.2020

Попробуйте использовать .execute_script:

date_element = driver.find_element_by_name('tb_date')
driver.execute_script("arguments[0].value = '2020-07-01';", date_element)
person frianH    schedule 15.07.2020

Желаемый элемент - это JavaScript активированный элемент с _onchange_event, имеющим __ doPostBack, чтобы щелкнуть элемент, который необходимо вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любой из следующих Стратегии поиска:

  • Использование 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')  
    
  • Использование 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')      
    
  • Использование 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')          
    
  • Примечание. Вам необходимо добавить следующий импорт:

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

использованная литература

Вы можете найти пару соответствующих подробных обсуждений в:

person DebanjanB    schedule 15.07.2020