繁体   English   中英

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

[英]Click checkbox not working using Selenium webdriver even if checkbox is displayed

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

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

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

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

或者,通过 JavaScript进行点击:

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

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

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

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

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

  1. 使用操作类进行点击: 链接到官方文档

    正如方法文档所说,

在方法链的末尾调用 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")));

元素已呈现,但它不在屏幕的可见部分:解决方案只是滚动到元素。 基于 Selenium 的版本,它可以用不同的方式处理,但我将提供一个适用于所有版本的解决方案:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM