Сообщение об ошибке Python Selenium «элемент не взаимодействует»

#python #selenium #element

Вопрос:

Я новичок в Selenium и пытаюсь автоматизировать ввод данных. Я пытаюсь получить идентификатор, а затем щелкнуть текстовое поле для отправки данных, но я продолжаю получать сообщение об ошибке. Я также попробовал Xpath, но, похоже, он не работает.

вот мой код.

     product = driver.find_element_by_id("(improved-inventory/js/extension-providers/ItemComboBox_0)[2]")
    product.click()
    product.send_keys("027459087093")
    product.send_keys(Keys.RETURN)
 

Любая помощь будет признательна. Вот HTML-файл, который в настоящее время принимает идентификатор из входного класса. Когда я вызвал product.isdisplayed (), он напечатал false.

 <div class="dijitInline dijitTextBox dijitComboBox quickfill qfComboBox dijitValidationTextBox"
id="widget_improved-inventory/js/extension-providers/ItemComboBox_0" 
role="combobox" aria-haspopup="true" data-dojo-attach-point="_popupStateNode" widgetid="improved-inventory/js/extension-providers/ItemComboBox_0" 
aria-disabled="false" aria-owns="improved-inventory/js/extension-providers/ItemComboBox_0_popup" > == $0

<input class="dijitReset dijitInputInner" type="text" autocomplete="off" 
data-dojo-attach-point="textbox,focusNode" role ="textbox" placeholder="Enter   Text" 
tabindex="0" id="improved-inventory/js/extension-providers/ItemComboBox_0" value aria-label="Enter Text:" aria-invalid="false" aria-disabled="false">
 

Ответ №1:

Попробуйте подождать, пока поле ввода станет доступным для кликабельности:

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

wait = WebDriverWait(driver, timeout=30)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".dijitReset.dijitInputInner")))
product = driver.find_element_by_css_selector(".dijitReset.dijitInputInner")
product.click()
product.send_keys("027459087093")
product.send_keys(Keys.RETURN)
 

Кроме того, исправьте свой локатор.

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

1. wait.until(...) возвращает веб-элемент, соответствующий селектору, так что вы можете просто сделать product = wait.until(...) .

2. Да, спасибо. Я знаю. Я просто предпочитаю более очевидный способ.

3. Принять/одобрить-это ответ на ваш вопрос 🙂