作为更大测试的一部分,我必须点击一个没有指定ID的特定按钮。在浏览并尝试了堆叠溢出的各种其他解决方案之后,我想简单地遍历所有的按钮--然后考虑如何单独选择并单击它。下面是代码:
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元素获得的代码:
<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.在循环中多次轮询并尝试捕获块.正如其他答案所提到的。为所有可能的解决方案获得相同的异常。
是什么导致了这一切?
附注:无法共享屏幕截图,因为这是一个适当的企业应用程序。
发布于 2018-05-23 13:58:56
解决方法之一是将其放入一个try-catch块中,捕获StaleElementReferenceException,然后什么也不做。
发布于 2018-05-23 17:24:16
来自文档
在两种情况中的一种情况下抛出陈旧元素引用异常,第一种情况比第二种情况更常见:
这些是可能导致此异常的常见原因。
在你的问题中,没有太多的信息,但考虑到你写的内容,你似乎是:
如果这样做,在尝试获取标签名称/文本时,需要重新定位元素driver.findElements(By.cssSelector(".btn.btn-primary"))
。
https://stackoverflow.com/questions/50483614
复制相似问题