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
当然,该值以毫秒为单位。
我最近开始使用 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 当然,该值以毫秒为单位。