как заполнить текстовое поле javascript с помощью selenium и python (без send_keys)

#python #selenium #selenium-chromedriver

#python #селен #selenium-chromedriver

Вопрос:

Я хочу ввести значение в поле

Я нахожу элемент с помощью:

 driver.find_element_by_xpath('//*[@id="cell--gE-Ez1qtyIA"]')
  

И я делаю это, чтобы отобразить текст и щелкнуть:

 driver.find_element_by_xpath('//*[@id="cell--gE-Ez1qtyIA"]').click()
driver.find_element_by_xpath('//*[@id="cell--gE-Ez1qtyIA"]').text
  

Пока все хорошо, но я использую этот код, когда хочу отправить значение в это поле:

 driver.find_element_by_xpath('//*[@id="cell--gE-Ez1qtyIA"]').send_keys('test')
  

Ничего не происходит, и значение поля не меняется

Комментарии:

1. лучше создайте минимальный рабочий код с реальным URL, чтобы мы могли запустить его и увидеть эту проблему

Ответ №1:

Поскольку мы не знаем о природе текстового поля, к которому вы пытаетесь получить доступ, есть некоторые возможности, из-за которых вы сталкиваетесь с этой ситуацией. send_keys() работает со всеми текстовыми полями, которые вы когда-либо использовали. Посмотрите на пункты ниже и попробуйте применить его к элементу:

  1. Элемент не извлекается должным образом, попробуйте какой-нибудь другой локатор, такой как id, name, css_selector.
  2. Элемент не готов к использованию, установите некоторое явное ожидание и проверьте наличие и видимость элемента.

Пример кода может использовать явное ожидание:

 wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_all_elements_located(("xpath", "//*[@id='cell--gE-Ez1qtyIA']")))
element.send_keys("test")
  

Ответ №2:

Попробуйте использовать javascriptexecutor вместо sendkeys

 WebDriver driver = new ChromeDriver();
JavascriptExecutor je = (JavascriptExecutor)driver;
je.executeScript("document.getElementById('IDofElement').setAttribute('value', 'your value here')");