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.

Вернуться на верх