我们正在使用Backbone.js并在运行WebDriver测试时遇到问题。我们收到以下错误:
org.openqa.selenium.StaleElementReferenceException: Error Message => 'Element does not exist in cache'
我们的理解是,这是在我们找到一个元素并对该元素执行操作时引起的(例如click()
)。我们发现的元素已经“陈旧”,我们怀疑该元素已被重新渲染或修改。
我们已经看到许多我们不热衷的解决方案:
Thread.Sleep(...)
。我们不希望在代码中明确睡眠StaleElementReferenceException
。我们认为这不是正确/清洁的解决方案,并且将来容易破裂WebDriverWait
并等待一些javascript函数执行返回true。我们看到人们在Angular中等待notifyWhenNoOutstandingRequests(callback)
,但找不到Backbone的任何明显内容。我们希望有一个干净的解决方案,不涉及明确的睡眠或某种形式的循环。有什么想法吗?
答案 0 :(得分:1)
我进一步研究了WebDriverWaits
,我认为我已经提出了一些对我们有用的期望组合:
wait.until(refreshed(elementToBeClickable(...)));
refreshed
期望是处理StaleElementReferenceException
的其他期望的包装器,elementToBeClickable
期望检查元素是否可点击。有趣的是,查看内置期望的来源,其中一些涉及StaleElementReferenceExceptions
,而其他人不参与(例如presenceOfElementLocated
)并且需要包含在更新的期望中,所以我认为这是我第一次看WebDriverWaits
时最初让我失望的原因。