我在Django中有一个类似这样的HTML输入元素
<input id="id" type="number" maxlength="50">
当我想查找并清除它时
elm_input = self.wait.until(EC.presence_of_element_located((By.ID, elm_id)))
elm_input.clear()
elm_input.send_keys(value)
出现错误InvalidElementStateException
InvalidElementStateException invalid element state: Element must be user-editable in order to clear it"
我们无法发送键清除,因为硒知道CLEAR
或DELETE
键是一种功能键,而不是数字键,它不会将键发送到元素输入。因此,我们如何解决它,我尝试过ActionChains
,但它也无法正常工作
此错误消息...
InvalidElementStateException invalid element state: Element must be user-editable in order to clear it"
...表示WebDriver实例无法清除元素的现有内容。
该元素的externalHTML多了一点,将有助于我们以更好的方式分析问题。但是,您需要注意以下几点:
presence_of_element_located()
,但必须为element_to_be_clickable()
引入WebDriverWait。确保定位器策略唯一地标识WebElement,并且您可以使用以下Locator Strategies中的任何一个:
使用CSS_SELECTOR
:
elm_input = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#id[type='number'][maxlength='50']")))
elm_input.clear()
elm_input.send_keys("1234567890")
使用XPATH
:
elm_input = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='id' and @type='number'][@maxlength='50']")))
elm_input.clear()
elm_input.send_keys("1234567890")
注:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
您可以在以下位置找到相关的讨论: