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

问题描述 投票:1回答:1

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

我们无法发送键清除,因为硒知道CLEARDELETE键是一种功能键,而不是数字键,它不会将键发送到元素输入。因此,我们如何解决它,我尝试过ActionChains,但它也无法正常工作

python selenium xpath css-selectors webdriverwait
1个回答
1
投票

此错误消息...

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
      

参考

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

© www.soinside.com 2019 - 2024. All rights reserved.