即使显示复选框,也单击复选框无法使用Selenium webdriver

时间:2016-01-22 13:47:07

标签: java selenium selenium-webdriver click

使用Selenium webdriver,我试图点击复选框但不能这样做,即使显示了该元素。

以下是我的代码:

false

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

3 个答案:

答案 0 :(得分:3)

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

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()

答案 1 :(得分:0)

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

如果我使用页面工厂获取WebElement,则不会发生这种情况。所以也许你应该尝试Selenium的PageFactory模式。无论如何,它更干净。

答案 2 :(得分:0)

有几种处理方法,请参见下文:

  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 wait=new WebDriverWait(driver, 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);