作为更大测试的一部分,我必须单击没有指定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.在循环中轮询多次并尝试捕获块
......正如其他答案所述。为所有可能的解决方案获得相同的例外。
可能导致这种情况的原因是什么?
P.S。无法共享屏幕截图,因为这是一个适当的企业应用程序。
答案 0 :(得分:0)
一种解决方法是将其放在try-catch块中,捕获StaleElementReferenceException并且不执行任何操作。
答案 1 :(得分:0)
在两种情况之一中抛出过时的元素引用异常, 第一个比第二个更常见:
- 该元素已被完全删除。
- 元素不再存在 附在DOM上。
这些是可能导致此异常的常见原因。
在你的问题中,没有很多信息,但考虑到你所写的内容,似乎你是:
如果您这样做,则在尝试获取标记名/文本时需要重新定位元素driver.findElements(By.cssSelector(".btn.btn-primary"))
。