Хромедрайвер закрывается после испытания

Поэтому я понимаю, что вызов driver.quit или close - это правильный способ закрыть драйвер и связанное с ним окно.

Однако при запуске моих тестов кажется, что даже без вызова driver.quit и вызова pass, окно все еще закрывается.

Я использую python с юнит-тестами, выполняемыми через pytest. Я также запускаю стандартные юниты через Pycharm. Во всех сценариях браузер закрывается, как описано. Я хочу, чтобы браузер оставался открытым и мог отлаживать тесты. Я мог бы просто позвонить спать (9000), но это кажется глупым.

Кроме того, браузер остается открытым при комментировании выхода на некоторых компьютерах, но не на других с тем же хром-драйвером, версией Chrome и кодом.

Анализируя журналы chromedriver, кажется, что он регистрирует команду QuitAll, но я понятия не имею, откуда она могла получить ее. Может ли файл pyc не быть перезаписан?

Код для выхода:

def tearDown(self):
    pass
    # self.driver.quit()

2 ответа

Решение

Служба остановится, как только ваш скрипт завершится из- за кода здесь.

Если вы хотите, чтобы хром и хромодрайвер оставались открытыми после этого, вы можете добавить detach опция при запуске chromedriver:

from selenium.webdriver import ChromeOptions, Chrome
opts = ChromeOptions()
opts.add_experimental_option("detach", True)
driver = Chrome(chrome_options=opts)

Чтобы максимально использовать возможности отладки с помощью и WebDriver, вот некоторая полезная информация:

pytest поставляется с некоторыми мощными возможностями отладки с помощью интерактивного отладчика Python («Режим отладки»), который использует следующие две библиотеки: включенную библиотеку и улучшенную (но необязательную) библиотеку.

Режим отладки можно активировать несколькими способами:

  • Ваш тест вызывает исключение после прохождения--pdbвариант к .
  • В тот момент, когда ваш тест начинается после прохождения--traceвариант к .
  • Вызовpdb.set_trace()илиipdb.set_trace()из вашего теста после импортаpdbилиipdbсоответственно. (Версии Python 3.7+ и новее также могут использоватьbreakpoint()способ входа в режим отладки.)

Когда режим отладки активирован, окно браузера остается открытым, и вы можете видеть, как выглядят переменные из командной строки.

(Обратите внимание, что вам может понадобиться добавить -sна ваш pytestзапустить команду, чтобы разрешить точки останова, если у вас еще нет pytest.iniфайл присутствует с addops = --capture=noв этом.)

Когда вы находитесь в режиме отладки, есть несколько команд, которые вы можете использовать для управления и отладки тестов:

  • n (следующий): выполнить следующую строку текущего блока метода.
  • s (шаг): пройти и выполнить следующую строку текущего блока метода (но если текущий метод вызывает другой метод, перейти вниз по стеку).
  • c (продолжить): выйти из режима отладки и продолжить тест с того места, где остановился текущий метод.
  • r (возврат): Продолжайте выполнение теста, пока текущий метод не вернется.
  • j (переход): перейти к номеру строки текущего блока метода.
  • w (где): показать, где вы находитесь в пределах текущей трассировки стека.
  • u (вверх): перемещение вверх по стеку.
  • d (вниз): перемещение вниз по стеку.
  • ll (длинный список): см. код текущего блока метода. dir(): Список объектов пространства имен.
  • h (помощь): Список всех доступных команд.

Кроме того, вы можете выполнить любой код Python, который вы хотите, в режиме отладки.

Не все режимы отладки одинаковы. Если вы входите в режим отладки после того, как тест вызывает исключение, вы находитесь в специальном «режиме отладки после смерти», который позволяет вам исследовать стек текущей трассировки стека, но вы больше не можете перейти к следующей строке метода, который вы были там, потому что это немедленно закончило бы тест.

(Это из учебника по режиму отладки pytest, который я создал здесь: https://seleniumbase.com/the-ultimate-pytest-debugging-guide-2021/)

Другие вопросы по тегам