【问题标题】:How to select the checkbox as per the html using Selenium WebDriver in Python如何根据 html 在 Python 中使用 Selenium WebDriver 选择复选框
【发布时间】:2019-02-06 05:16:11
【问题描述】:

我有一个需要使用 Selenium 选择的复选框。下面是HTML:

<input id="diDataCheck" ng-model="$parent.DIDATA.IsSet" name="Mode" type="checkbox" class="ng-pristine ng-untouched ng-valid ng-empty" xpath="1">

我尝试使用它的id 或name 甚至使用XPath 来访问它,但它似乎不起作用。

CHECKBOX = (By.XPATH, ".//*[contains(text(), 'diDataCheck')]""") # using XPATH
CHECKBOX = (By.ID, "diDataCheck") # using id
CHECKBOX = (By.NAME, "Mode") # using name

我在上面使用的是:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable(CHECKBOX)).click()

我也在try except 中加入了上述行,但在Exception message 中我一无所获。

当我将WebDriverWait() 更改为:

driver.find_element_by_id("diDataCheck").click()

我遇到了异常:

Message: element not visible

【问题讨论】:

  • 复选框在 HTML 页面上是否可见?
  • XPath 不正确,因为 input 不能包含文本。分享你是如何实现try/except 并解释got nothing in Exception message 是什么意思

标签: python selenium xpath css-selectors webdriver


【解决方案1】:

这是您可以做到这一点的一种方法:

driver.execute_script("document.getElementById('diDataCheck').click()")

但是没有“安全”的方法可以知道按钮是否被按下,所以请记住这一点。如果您想确定是否单击了复选框,可以在输入元素上实现更改事件处理程序。

【讨论】:

    【解决方案2】:

    您可以将此 XPath 与等待条件一起使用

    checkElement = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.XPATH, "//input[@name='Mode' and  @type='checkbox']")));
    
    checkElement.click();
    

    【讨论】:

      【解决方案3】:

      根据 HTML,您已将 checkbox 设为 Angular 元素,因此要在其上调用 click(),您必须诱导 WebDriverWait 使所需的元素可点击,您可以使用以下任一解决方案:

      • CSS_SELECTOR:

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ng-pristine.ng-untouched.ng-valid.ng-empty#diDataCheck[name='Mode']"))).click()
        
      • XPATH:

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ng-pristine ng-untouched ng-valid ng-empty' and @id='diDataCheck'][@name='Mode']"))).click()
        

      注意:您必须添加以下导入:

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

      【讨论】:

      • 它不适用于您提到的CSS_SELECTOR 和XPATH。我不知道这里出了什么问题。
      • 查看我更新的答案。错误说明了什么?使用错误跟踪日志更新问题以进行分析。
      猜你喜欢
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2015-09-20
      • 1970-01-01
      相关资源
      最近更新 更多