Страница содержит некоторые данные (таблица с несколькими строками). Существует кнопка «Обновить», которая перезагружает и перерисовывает некоторые элементы на странице без перезагрузки статических данных (ajax).selenium.common.exceptions.StaleElementReferenceException при обновлении страницы
Я пытаюсь создать правильный тест для этой страницы, но иногда получаю исключение StaleElementReferenceException.
Мой код (питон):
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)
1 из 5 итераций не будет работать на линии "если не 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? Благодарю.
Я понимаю общую идею, стоящую за проблемой Стайл, но я хочу найти хороший способ избежать этого, без бесконечных «try/except». –
Попробуйте использовать другие типы локаторов. – Hemanth