java单击复选框未使用Selenium webdriver工作,即使复选框已显示
使用SeleniumWebDriver,我尝试单击复选框,但无法这样做,即使显示了元素
下面是我的代码:
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
元素已显示,但我仍然无法选中复选框。 原因可能是什么?我哪里做错了
# 1 楼答案
我和你一样试过,只是用了C。我可以点击复选框,看到它在屏幕上改变了状态。但是当我试图读取复选框的选中状态时,我得到了一个异常:
stale element reference: element is not attached to the page document
如果我使用页面工厂获取WebElement,则不会发生这种情况。所以也许你应该试试Selenium的PageFactory模式。反正比较干净
# 2 楼答案
有几种处理方法,请参见以下内容:
将action类用于单击: Link to Official documentation
正如方法文档所说
使用Actions类实现单击的一般方法如下:
如果Actions类失败,有时原因可能是您收到以下异常:
ElementNotInteractiableException[object HtmlPanelElement]没有大小和位置
这可能意味着两件事:
元素没有正确呈现:解决方法就是使用隐式/显式等待
隐式等待:
司机。管理()。超时()。隐式等待(50,时间单位秒)
显式等待:
WebDriverWait wait=新的WebDriverWait(驱动程序,20); element1=等待。直到(ExpectedConditions.elementtobelickable(By.className(“fa-stack-1x”))
b.元素已渲染,但它不在屏幕的可见部分:解决方案只是滚动到元素。基于Selenium的版本,它可以以不同的方式处理,但我将提供一个适用于所有版本的解决方案:
# 3 楼答案
您可以尝试移动到复选框,然后单击:
或者,通过JavaScript进行单击:
但是,请确保您了解必须这样做的原因:WebDriver click() vs JavaScript click()