В приведенном ниже тесте я нажимаю на каждую карточку на по этой ссылке и проверяю, совпадает ли текст заголовка. Я сталкиваюсь с StaleElementReferenceException, и я предполагаю, что переменная internships
становится устаревшей после нажатия на карту, даже если я использую self.driver.back()
, чтобы вернуться на страницу, с которой я нажал.
Есть ли обходной путь для этот тип вопроса? Или мне нужно создавать отдельные тесты для каждой карты? Если да, есть ли в PyTest встроенный модуль, который позволяет легко создавать отдельные тесты?
def test_internship_links(self):
num_title_mismatch = 0
title_mismatches = {}
internships_xpath = (
"//div[@id='related_projects']//div[@class='project-description']/h3"
)
internships = self.driver.find_elements(By.XPATH, internships_xpath)
for internship in internships:
outer_title = internship.text
internship.click()
inner_title = self.driver.find_element(
By.XPATH, "//div[@class='primary']//h1"
).text
if inner_title != outer_title:
num_title_mismatch += 1
title_mismatches[outer_title] = inner_title
self.driver.back()
assert (
num_title_mismatch == 0
), f"\n{num_title_mismatch} title mismatch(es) found:\n{title_mismatches}"
Отслеживание ошибок:
________________________________________________________________________ TestSearchInterships.test_internship_links ________________________________________________________________________
self = <test_search_internships.TestSearchInterships object at 0x1081bfe90>
def test_internship_links(self):
num_title_mismatch = 0
title_mismatches = {}
internships_xpath = (
"//div[@id='related_projects']//div[@class='project-description']/h3"
)
internships = self.driver.find_elements(By.XPATH, internships_xpath)
for internship in internships:
> outer_title = internship.text
tests/test_search_internships.py:41:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../../.local/share/virtualenvs/converge-testing-PXQ7_xev/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py:81: in text
return self._execute(Command.GET_ELEMENT_TEXT)['value']
../../../.local/share/virtualenvs/converge-testing-PXQ7_xev/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py:693: in _execute
return self._parent.execute(command, params)
../../../.local/share/virtualenvs/converge-testing-PXQ7_xev/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py:338: in execute
self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _