@Pompeius_Magnus
Студент

Почему вываливается StaleElementReferenceException?

Добрый день!

Есть несколько тестов к одной форме, которые используют следующий код:

def select_drop_down(context, text, id):
WebDriverWait(context.browser, TIME_FOR_WAIT).until(
    EC.element_to_be_clickable((By.XPATH, '//div[@id = "%s"]/a' % id))
)
element = context.browser.find_element_by_xpath('//div[@id = "%s"]/a' % id)
scroll_element_into_view(context.browser, element)
context.browser.find_element_by_xpath('//div[@id = "%s"]/a' % id).click()
WebDriverWait(context.browser, TIME_FOR_WAIT).until(
    EC.presence_of_element_located((By.XPATH, "//*[@id='select2-drop']/div/input"))
)
context.browser.find_element_by_xpath("//*[@id='select2-drop']/div/input").send_keys(text)
WebDriverWait(context.browser, TIME_FOR_WAIT).until(
    EC.visibility_of_element_located((By.XPATH, '//*/li//*[contains(text(), "%s")]' % text))
)
context.browser.find_element_by_xpath('//*/li//*[contains(text(), "%s")]' % text).click()

Код выбирает элемент из выпадающего списка.
В некоторых тестах работает, в некоторых нет.
При этом если запустить тесты в которых код не работает отдельно -- тесты проходят.

Проблемное место:
context.browser.find_element_by_xpath("//*[@id='select2-drop']/div/input").send_keys(text)
WebDriverWait(context.browser, TIME_FOR_WAIT).until(
EC.visibility_of_element_located((By.XPATH, '//*/li//*[contains(text(), "%s")]' % text))


В этом месте иногда вываливается ошибка -- StaleElementReferenceException: Message: Element not found in the cache.

Почему это может происходить?
Спасибо.

P.S. Используется firefox 24
  • Вопрос задан
  • 433 просмотра
Решения вопроса 1
@Talik0507
Работаю, Живу
могу только предположить, в момент ожидания видимости (By.XPATH, '//*/li//*[contains(text(), "%s")]' % text) сам элемент меняется, потому однажды найденный элемент протухает. Соответственно, при очередной проверке видимости вебдрайвер просто уже не находит елемента по найденной ранее ссылке на объект
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы