2015-03-30 39 views
2

我正在为我的Rails应用程序编写Selenium测试,有时会遇到“陈旧元素”异常。在对其进行操作之前对元素执行另一个查找是很容易的,但为了让我的代码保持干爽,我想知道 - 在“刷新”陈旧引用的对象上是否有任何方法可用于Selenium::WebDriver::Element对象?Selenium Webdriver - 刷新陈旧元素快捷方式?

编辑:澄清,我问是否有一些速记方法做另一个find_by_xpath(或id等)调用与传递相同的参数。它功能完善,不像某种“刷新”方法那么简单。

回答

3

如果我理解正确,那么您在询问关于某个WebElement实例的某种“刷新”或“更新”方法。

不幸的是,根据定义,selenium中没有这种东西。根据相关问题WebElement refresh() or getBy() needed

WebElement对象是一个代理,一个DOM元素的代表。当 DOM元素被浏览器破坏时,WebElement被标记为“陈旧” 并且不能再使用。

如果有另一页上类似 DOM元素,你可以得到它 与findElement,硒将为这个 DOM元素的 WebElement对象 (代理)。旧的WebElement对象 将保持陈旧状态,因为底层的DOM对象被销毁,并且从未可以恢复 。相似性不是平等的。

我会推荐存储特定于元素的定位器,但是一旦页面刷新,您仍然需要通过定位器“查找”元素。

+0

基本上,是的。我可以再调用'.find_by_xpath()'来刷新元素,但“刷新”方法看起来更简洁。不是一个大问题,只是想知道。感谢您的答复! – Argus9 2015-03-30 20:39:48

0

唯一可用的是在编写Selenium代码时跟踪您的应用程序状态。

您是否执行刷新DOM的操作?然后,您需要执行另一个findElement调用以获取您希望与之交互的元素的新实例。

否则,在Utility类中编写自己的方法​​,该类尝试查找元素,捕获StaleElement异常并重试。