Невозможно отправить дату в виде текста в поле datepicker с помощью send_keys, когда атрибут max установлен с помощью ChromeDriver и Selenium - PullRequest
2 голосов
/ 12 февраля 2020

Я пытаюсь использовать chromedriver для загрузки некоторых файлов.

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

chromedriver отлично работает для загрузки, но я не могу send_keys() с элементом ниже, он работает на firefox но не могу заставить его работать над этим.

<input name="" value="" id="was-returns-reconciliation-report-start-date" type="date" class="was-form-control was-input-date" data-defaultdate="" data-mindate="" data-maxdate="today" data-placeholder="Start Date" max="2020-02-12">

Я пробовал:

el = driver.find_element_by_id("was-returns-reconciliation-report-start-date")
el.clear()
el.send_keys("2020-02-01")
el.send_keys(Keys.ENTER)  # Separately

# Tried without clear as well
# no error but the date didn't change in the browser

driver.execute_script("document.getElementById('was-returns-reconciliation-report-start-date').value = '2020-01-05'")

# No error and no change in the page

1 Ответ

0 голосов
/ 13 февраля 2020

Чтобы отправить последовательность символов в поле <input>, в идеале вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать одну из следующих Стратегий локатора :

  • Использование ID:

    el = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.ID, "was-returns-reconciliation-report-start-date")))
    el.clear()
    el.send_keys("2020-02-12")
    
  • Использование CSS_SELECTOR:

    el = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "input.was-form-control.was-input-date#was-returns-reconciliation-report-start-date")))
    el.clear()
    el.send_keys("2020-02-12")
    
  • Использование XPATH:

    el = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//input[@class='was-form-control was-input-date' and @id='was-returns-reconciliation-report-start-date']")))
    el.clear()
    el.send_keys("2020-02-12")
    
  • Примечание : необходимо добавить следующие импорты:

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