Selenium: Превышен максимум повторных попыток при использовании url
Полное отслеживание:
Traceback (most recent call last):
File "/home/webadmin/dev.taracares.com/src/app_payroll_reports/tests.py", line 134, in test_mstnla_sums_incentives_tennessee_sum
int(quince_amount_cell.text.replace(',', '')) +
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 77, in text
return self._execute(Command.GET_ELEMENT_TEXT)['value']
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 710, in _execute
return self._parent.execute(command, params)
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 423, in execute
response = self.command_executor.execute(driver_command, params)
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/selenium/webdriver/remote/remote_connection.py", line 333, in execute
return self._request(command_info[0], url, body=data)
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/selenium/webdriver/remote/remote_connection.py", line 355, in _request
resp = self._conn.request(method, url, body=body, headers=headers)
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/urllib3/request.py", line 74, in request
return self.request_encode_url(
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/urllib3/request.py", line 96, in request_encode_url
return self.urlopen(method, url, **extra_kw)
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/urllib3/poolmanager.py", line 375, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/urllib3/connectionpool.py", line 783, in urlopen
return self.urlopen(
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/urllib3/connectionpool.py", line 783, in urlopen
return self.urlopen(
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/urllib3/connectionpool.py", line 783, in urlopen
return self.urlopen(
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/urllib3/connectionpool.py", line 755, in urlopen
retries = retries.increment(
File "/home/webadmin/dev.taracares.com/dev/lib/python3.8/site-packages/urllib3/util/retry.py", line 574, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=58331): Max retries exceeded with url: /session/0f8192d1-c39f-49d1-9a99-7f91dfe95481/element/a5dd2645-6c15-44dc-b000-04bf6b7ea6cb/text (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fd9dcde24f0>: Failed to establish a new connection: [Errno 111] Connection refused'))
Этот код выполняется в тестах для приложения django. Раньше тесты выполнялись нормально, теперь последние 4 теста (которые используют selenium) содержат ошибки, которые начались после того, как я добавил driver.quit() после каждого теста.
Однако это странно. Вот соответствующий код, который выполняется в каждом (из последних четырех) тестов:
options = webdriver.FirefoxOptions()
options.add_argument("--headless")
driver = webdriver.Firefox(options=options)
driver.get('https://dev.taracares.com/pr-run-ppe?group=MS%2FTN%2FLA&check_date=05%2F01%2F2022')
# some selenium code
driver.quit()
Что происходит?
Убедитесь, что quit действительно находится в нижней части вашего кода. Команда, в которой возникает ошибка, предназначена для получения текста элемента. Похоже, что вы вышли из драйвера, а затем пытаетесь выполнить вызов для получения текста элемента, связанного с сессией этого драйвера.
Строка типа driver.quit() должна быть сохранена для метода tearDown() и т.д. Таким образом, она все равно будет вызвана, если тест закончится/провалится раньше времени, и не будет вызвана слишком рано, когда вам еще может понадобиться драйвер, например, при вызове .text(), который требует, чтобы драйвер все еще был открыт.
Многие существующие фреймворки для Python уже имеют раздел tearDown(), куда можно поместить driver.quit() (например, классы, наследующие unittest.TestCase), или это может быть частью pytest фикстуры, (например, pytest_runtest_teardown). Некоторые фреймворки, объединяющие Python/Selenium, автоматически закрывают драйвер в конце теста (например, SeleniumBase), избавляя вас от этого шага. Полное раскрытие информации: я являюсь автором/содержателем SeleniumBase.