InvalidElementStateException 无效的元素状态:元素必须是用户可编辑的才能清除它“使用 Selenium 发送文本时出错 Python

InvalidElementStateException invalid element state: Element must be user-editable in order to clear it" error while sending text with Selenium Python

我在 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"

我们无法发送清除键,因为 selenium 知道 CLEARDELETE 键是字符键而不是数字键,它不会将键发送到元素输入。那么我该如何解决它呢,我试过 ActionChains 但它也无法正常工作

这个错误信息...

InvalidElementStateException invalid element state: Element must be user-editable in order to clear it"

...暗示 WebDriver 实例无法清除元素的现有内容。


元素的 outerHTML 多一点可以帮助我们更好地分析问题。但是,您需要注意以下几点:

  • 在发送 字符序列 而不是使用 presence_of_element_located() 时,您必须为 element_to_be_clickable() 引入 WebDriverWait .
  • 确保 Locator 策略 唯一标识 WebElement 并且您可以使用以下任一方法 :

    • 使用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
      

参考

您可以在以下位置找到相关讨论: