#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. Принять/одобрить-это ответ на ваш вопрос 🙂