【问题标题】:Click checkbox not working using Selenium webdriver even if checkbox is displayed即使显示复选框,单击复选框也无法使用 Selenium webdriver
【发布时间】:2016-04-29 03:24:39
【问题描述】:

使用 Selenium webdriver,我试图点击复选框但无法这样做,即使元素已显示。

下面是我的代码:

WebElement element = 
new WebDriverWait(webDriver, 1000).until(ExpectedConditions.presenceOfElementLocated(By.xpath(prop.getProperty(object))));
element.isDisplayed(); // returns true
element.getAttribute("type"); // returns checkbox
element.isSelected(); // returns false

element.click();
element.isSelected(); // still returns false

元素已显示,但我仍然无法选中复选框。 可能是什么原因?我哪里错了?

【问题讨论】:

  • 一个原因可能是它未启用。你试过element.isEnabled()
  • 它已启用。 element.isEnabled() 返回 true

标签: java selenium selenium-webdriver click


【解决方案1】:

您可以尝试移动到复选框,然后点击:

Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();

或者,点击通过 JavaScript

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", element);

但是,请确保您了解必须这样做的原因:WebDriver click() vs JavaScript click()

【讨论】:

    【解决方案2】:

    我尝试了和你一样的方法,只是在 C# 中。我能够单击 CheckBox 并看到它在屏幕上改变了它的状态。但是当我试图读取复选框的选中状态时,我得到了一个异常:stale element reference: element is not attached to the page document

    如果我使用页面工厂来获取 WebElement,则不会发生这种情况。所以也许你应该试试 Selenium 的 PageFactory 模式。反正比较干净。

    【讨论】:

      【解决方案3】:

      有几种处理方法,请看下面:

      1. 使用动作类进行点击: Link to Official documentation

        正如方法文档所说,

      在方法链的末尾调用 perform() 以实际执行操作。

      使用Actions类实现点击的一般方法如下:

      actionsObj.moveToElement(element1).click().build().perform()
      
      1. 如果 Actions 类失败,有时原因可能是您收到以下异常:

        ElementNotInteractableException [object HTMLSpanElement] 没有大小和位置

      这可能意味着两件事:

      一个。元素未正确渲染:解决方案就是使用隐式/显式等待

      • 隐式等待:

        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);

      • 显式等待:

        WebDriverWait 等待=新 WebDriverWait(驱动程序, 20); element1 = wait.until(ExpectedConditions.elementToBeClickable(By.className("fa-stack-1x")));

      b. 元素已经渲染,但它不在屏幕的可见部分:解决方案只是滚动到元素。根据 Selenium 的版本,它可以以不同的方式处理,但我将提供适用于所有版本的解决方案:

          JavascriptExecutor executor = (JavascriptExecutor) driver;
          executor.executeScript("arguments[0].scrollIntoView(true);", element1);
      
      1. 假设这一切都失败了,那么另一种方法是再次使用 Javascript 执行器,如下所示: executor.executeScript("arguments[0].click();", element1);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        • 2021-12-23
        • 2017-11-10
        • 1970-01-01
        • 2020-04-25
        • 2019-05-18
        相关资源
        最近更新 更多