#python #selenium #selenium-webdriver
Вопрос:
РЕШАЕМАЯ:
Похоже, что это единственное поле ввода будет недоступно для взаимодействия, если оно не было нажато в последние 0,1 секунды. Для решения этой проблемы использовался следующий код:
ActionChains(self.driver).move_to_element(input).click().send_keys("200").perform()
Таким образом, фокус остается на элементе, и ввод работает. Интересно, что если вызывается input.send_keys(), это все равно не работает.
Проблема:
После нажатия кнопки на веб-сайте открывается всплывающее окно, содержащее несколько полей ввода, которые генерируются react. Большинство из них доступны. Однако один из них не является и возвращает ошибку ElementNotInteractableException. Я пробовал наиболее распространенные решения, но они не работают.
Интересная часть заключается в том, что когда к элементу обращаются вручную из интерфейса, с ним можно взаимодействовать. Элемент также обычно отображается на скриншоте, который делается при возникновении исключения
Пробные решения:
- Увеличить неявное ожидание до 1 минуты,
- Добавить явное ожидание до 1 минуты
- Используйте разные методы поиска для элемента
- Измените порядок проверки, чтобы увидеть, влияют ли на него другие элементы (все возможные заказы завершились неудачей)
- Добавить цепочки действий Переместить и щелкнуть. Перемещение и щелчок работают (я вижу, что элемент выбран синим контуром, но ввод все еще ощущается)
- Используйте Javascript для вставки строки в поля ввода.значение
Блок кода, в котором возникает ошибка:
#this input element is next to it in the same parent element
dropdownparent = elems[2].find_element_by_xpath(".//div[@role='combobox']")
dropdowninput = dropdownparent.find_element_by_css_selector("input")
f.inputtext(dropdowninput, "Coulance", True )
#reobtain the parent items to avoid a stale element reference error
modal = self.driver.find_element_by_class_name("component-window")
body = modal.find_element_by_class_name("body")
elems = body.find_elements_by_xpath("./div")
required = elems[2].find_elements_by_class_name("required")
inputparent = required[1].find_element_by_class_name("input")
input = inputparent.find_element_by_css_selector("input")
#error occurs on next line
f.inputtext(input, "200")
Журнал ошибок:
его длинный, но очень стандартный элемент недоступен
Любые предложения будут оценены, я буду обновлять раздел «Проверенные решения» всякий раз, когда я что-то пробую
Ответ №1:
Элемент, с которым невозможно взаимодействовать, появляется, когда элемент находится вне области, доступной для просмотра, или какой-либо другой элемент закрывает этот элемент. Вы можете попробовать прокрутить страницу до элемента или задать входное значение, выполнив javascript, что-то вроде этого:
element = inputparent.find_element_by_css_selector("input")
driver.execute_script("""arguments[0].value = arguments[1];""", element, "some input value")
Комментарии:
1. Я только что попробовал это, и каким-то образом возможно добавление цепочек действий (self.driver).move_to_element(input).click(input).perform(), поэтому с элементом можно взаимодействовать! Однако попытка send_keys() по-прежнему возвращает исключение ElementNotInteractableException. Что касается изменения значения javascript, оно не выдает ошибку, но также, похоже, ничего не добавляет к полю.
2. Поделитесь сайтом, чтобы я мог видеть, какой элемент блокирует добавление ввода
3. С удовольствием, но он все еще находится в разработке 😉 Но ваш комментарий на самом деле привел меня к поиску решения, которое я отметил выше!
4. Действительно счастлив. Кроме того, примите ответ, если он полезен.