Selenide ElementsCollection 抛出 StaleElementException

Selenide ElementsCollection throwing StaleElementException

我最近开始使用 Selenide,我喜欢它允许的流畅代码。 但是,我确实遇到了 ElementsCollection 的奇怪问题。

$$("some ref").filterBy(not(attribute("an-attr-that-should-not-be"))).getTexts()

此查询断断续续地 returns 字符串化 StaleElementReferenceExceptions,我不明白为什么。

如果我 运行 在调试器中查询,它 returns 有效值,而在正常 运行 时间(单线程应用程序)期间,这就是我得到的。

目标元素是一个 GWT 组合框结果列表。

有人能给我指出正确的方向吗?

更新:如果相关,我正在使用 InternetExplorerDriver。

Chrome 和 ChromeDriver 专门触发 StaleElementReferenceException 就像你的测试点一样 - 任何时候一个元素不再可见你有 WebElement 参考它变得无效,你必须重新查找它。如果组合是 showing/hiding 或更改它们可能会导致这种情况(需要更多关于哪个组合的详细信息以及更具体的原因) - 尝试在您希望使用它时查找元素而不是再次重复使用引用然后再次。

找到问题了。显然,Selenide ElementsCollection 缓存了以前版本的元素列表,更新速度比预期的慢很多,并且在检索文本时试图访问这个幻影数据。

通过在迭代列表的地方使用 $$ 而不是 class header 中的常用静态常量来修复。

我对这个问题的解决方案非常简单直接。我只是将搜索元素的超时设置为 10 秒左右,它就起作用了。它只能用一个字符串来完成: Configuration.timeout=10000 当然,该值以毫秒为单位。