页面刷新期间selenium.common.exceptions.StaleElementReferenceException

Geo*_*lin 5 selenium webdriver

页面包含一些数据(包含少量行的表).有"刷新"按钮可以重新加载和重绘页面上的一些元素,而无需重新加载静态数据(ajax).

我正在尝试为该页面创建正确的测试,但有时会收到StaleElementReferenceException.

我的代码(python):

from selenium import webdriver
browser=webdriver.Firefox()
browser.get('http://mytisite')
browser.implicitly_wait(10)
browser.find_element_by_id('start').click()
while browser.find_element_by_id('status').text!='Done':
    browser.find_element_by_id('refresh').click()
    for row in browser.find_elements_by_class_name('datarow'):
        if not is_correct(row.text):
           print "incorrect"
    time.sleep(10)
Run Code Online (Sandbox Code Playgroud)

5次迭代中的1次失败就行"if not is_correct(row.text)":

selenium.common.exceptions.StaleElementReferenceException: 
 Message: u'Element not found in the cache - perhaps the page 
 has changed since it was looked up' ; Stacktrace: Method 
 fxdriver.cache.getElementAt threw an error in 
 resource://fxdriver/modules/web_element_cache.js 
Run Code Online (Sandbox Code Playgroud)

主要问题:页面已包含以前的数据,所以我在ajax刷新和webdriver的元素查询之间进行竞争find_elements_by_class_name('datarow').

我怎样才能正确解决ajax refresh和webdriver之间的竞争?谢谢.

Sur*_*pak 3

在以下两种情况之一中会引发过时元素引用异常,第一种情况比第二种情况更常见:

  • 该元素已被完全删除。
  • 该元素不再附加到 DOM

请浏览以下硒文档以获取更多信息

过时元素参考异常文档