【发布时间】:2013-04-15 05:39:07
【问题描述】:
页面包含一些数据(有几行的表)。有一个“刷新”按钮,可以重新加载和重绘页面上的某些元素,而无需重新加载静态数据 (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)
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
主要问题:页面已经包含以前的数据,所以我在 ajax 刷新和 webdriver 的 find_elements_by_class_name('datarow') 元素查询之间发生竞争。
如何正确解决 ajax 刷新和 webdriver 之间的竞争?谢谢。
【问题讨论】: