[英]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 模式。 总之比较干净。
有几种处理方法,请参见下文:
使用操作类进行点击: 链接到官方文档
正如方法文档所说,
在方法链的末尾调用 perform() 以实际执行操作。
使用 Actions 类实现点击的一般方法如下:
actionsObj.moveToElement(element1).click().build().perform()
如果 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.