我最近开始使用Selenide,我喜欢它允许的流畅代码。 但是,我对ElementsCollection有一个奇怪的问题。
$$("some ref").filterBy(not(attribute("an-attr-that-should-not-be"))).getTexts()
此查询间歇性地返回字符串化StaleElementReferenceExceptions
,我无法理解原因。
如果我在调试器中运行查询,它会返回有效值,而在正常运行时(单线程应用程序)中,这就是我得到的。
目标元素是GWT组合框结果列表。
有人可以指出我正确的方向吗?
更新:如果相关,我正在使用InternetExplorerDriver。
答案 0 :(得分:1)
Chrome和ChromeDriver特别关闭StaleElementReferenceException
,就像您的测试点一样 - 只要一个元素不再可见,您拥有的WebElement
引用就会变得无效,您必须再次查找它。如果组合显示/隐藏或更改那些可能导致这个(需要更多关于哪个组合的细节以及更具体的原因) - 尝试在期望使用它时查找元素而不是一次又一次地重复使用该引用。
答案 1 :(得分:0)
发现问题。显然,Selenide ElementsCollection
缓存了元素列表的先前版本,其更新速度比预期慢很多,并且在检索文本时尝试访问此ghost数据。
通过使用$$来修复列表,而不是类头中常用的静态常量。
答案 2 :(得分:0)
我对此问题的解决方案非常简单直接。我只是将搜索元素的超时设置为大约10秒,然后就可以了。它只能用一个字符串完成: Configuration.timeout = 10000 当然,该值以毫秒为单位。