【发布时间】:2018-11-02 03:53:59
【问题描述】:
作为大型测试的一部分,我必须单击没有分配 ID 的特定按钮。在 stackoverflow 上浏览并尝试了各种其他解决方案之后,我想简单地遍历所有按钮 - 然后考虑如何单独选择它并单击它。代码如下:
List<WebElement> buttons = driver.findElements(By.cssSelector(".btn.btn-primary"));
for (WebElement b:buttons) {
System.out.println(b.getTagName());
System.out.println(b.getText());
}
按钮是使用 Jquery 动态生成的。实际网页只是 .js 引用的集合。这是我从 Inspect Element 得到的代码:
<div class="modal-footer">
<button class="btn btn-primary" type="button" data-bb-handler="yes">Task Status</button>
<button class="btn btn-primary" type="button" data-bb-handler="danger">Close</button>
</div>
此网页上的流程中有 20 多个按钮(在此阶段几乎看不到 4-5 个)。目前,如上面的代码部分所示,有一个带有两个按钮的弹出窗口(背景褪色)。
在 selenium 中,它会将 StaleElementReferenceException: stale element reference: element is not attached to the page document 扔到 b.getTagName() 的行上。
不确定是什么原因造成的。已经尝试过:
1.隐式等待30秒。
2.XPath选择器
3.循环多次轮询和try-catch块
...如其他答案中所述。为所有可能的解决方案获得相同的例外。
这可能是什么原因?
附言无法分享屏幕截图,因为这是一个专有的企业应用程序。
【问题讨论】:
-
你试过显式等待吗?喜欢
org.openqa.selenium.support.ui.Wait.until()和ExpectedConditions.elementToBeClickable() -
你可以这样做:driver.findElements(By.xpath("//div[@class='btn btn-primary' and @data-bb-handler ='yes']")对于“任务状态”按钮?您能否显示更多 HTML,也许有一种方法可以捕获您需要的元素?
-
你能分享一下代码吗:在循环中多次轮询和 try-catch 块?我认为它应该工作!
-
@MadhavCp 你能用你需要
getTagName()和getText()的buttons的确切用例 更新问题吗?
标签: java selenium testing xpath css-selectors