0

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

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

此查询间歇性地返回 stringified StaleElementReferenceExceptions,我不明白为什么。

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

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

有人可以指出我正确的方向吗?

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

4

3 回答 3

1

Chrome 和 ChromeDriverStaleElementReferenceException就像你的测试点一样特别触发 - 任何时候元素不再可见,WebElement你对它的引用就会变得无效,你必须再次查找它。如果组合显示/隐藏或更改这些可能会导致这种情况(需要更多关于哪个组合以及似乎导致它更具体的原因的详细信息) - 在您希望使用它时尝试查找元素,而不是一次又一次地重用引用.

于 2015-10-27T22:24:07.810 回答
0

发现了问题。显然,SelenideElementsCollection缓存了元素列表的先前版本,它的更新速度比预期的要慢得多,并且在检索文本时试图访问这个幽灵数据。

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

于 2015-11-10T10:24:27.423 回答
0

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

于 2017-02-11T09:24:50.763 回答