Хромедрайвер закрывается после испытания
Поэтому я понимаю, что вызов 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/)