使用Selenium webdriver,我试图点击复选框但不能这样做,即使显示了该元素。
以下是我的代码:
false
显示元素,但我仍然无法选中该复选框。 可能是什么原因?我哪里错了?
答案 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)
有几种处理方法,请参见下文:
使用操作类进行点击: Link to Official documentation
正如方法文档所说,
在方法链的末尾调用 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")));
B. 元素已呈现但不在屏幕的可见部分:解决方案只是滚动到元素。基于 Selenium 的版本,它可以用不同的方式处理,但我会提供一个适用于所有版本的解决方案:
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].scrollIntoView(true);", element1);