Можем ли мы просто запустить хромедрайвер один раз с Selenium при повторной автоматизации? - PullRequest
0 голосов
/ 29 декабря 2018

Я использую Selenium для автоматизации.Однако, если я повторю автоматизацию, у меня будет много хромодрайверов.

Я хочу решить эту проблему.Вы не можете просто запустить один хромедрайвер?

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Причина, по которой вы остались с процессами * driver.exe, скорее всего заключается в том, что вы не закрываете их явно в конце выполнения тестов - вызывая метод quit() для объекта драйвера на выбранном вами языке.

Этот шаг обычно выполняется в деструкторе объекта - если вы используете объектно-ориентированный подход;блок finally, если это обработка исключений;или строки выхода программы / скрипта.Большинство высокоуровневых фреймворков (Cucumber, TestNG, Robotframework, множество модульных тестов на разных языках) имеют некие «отрывные» блоки, которые обычно используются для этой цели.


Почемуэто происходит?

Когда вы запускаете автоматизацию, ОС запускает процесс для нее;когда вы создаете экземпляр объекта webdriver, он порождает процесс для драйвера браузера - "chromedriver.exe" в вашем случае.Следующим шагом является открытие экземпляра браузера - "chrome.exe".

Когда ваш запуск завершится, процесс для него будет закрыт.Но, если вы явно не вызвали метод quit() - драйвер браузера сохраняется, «остается в живых»;и теперь это осиротевший процесс (не путать с зомби, что совершенно другое) - полностью функциональный, но без какой-либо программы для управления им.

Фактически, на этом этапе - имеярабочий процесс драйвера и браузер, вы можете подключиться к нему и использовать в будущих запусках.Узнайте, как и почему здесь - https://stackoverflow.com/a/52003231/3446126

0 голосов
/ 29 декабря 2018

Согласно предоставленному вами скриншоту, в вашей системе, кажется, присутствует пара процессов Zombie ChromeDriver .

Если ответить прямо, вы не можете работать с инициацией только одного ChromeDriver обрабатывает, а повторяет автоматизацию , поскольку вы не можете повторно подключиться к предыдущему сеансу просмотра.Вы можете найти подробное обсуждение в Как я могу повторно подключиться к браузеру, открытому веб-драйвером с селеном?

Ваши испытания кода позволили бы нам лучше понять, почему ChromeDriver процессы не очищаются.В соответствии с лучшими практиками всегда вызывайте driver.quit() в методе tearDown(){}, чтобы закрыть и уничтожить WebDriver и Веб-клиент экземпляров изящно следующим образом:

driver.quit() // Python
//or
driver.quit(); // Java
//
driver.Quit(); // DotNet

Youподробное обсуждение можно найти в Веб-драйвер PhantomJS остается в памяти

В случае, если процессы ChromeDriver все еще не уничтожены и не удалены, вам может потребоваться убить процессы из списка задач.Вы можете найти подробное обсуждение в Selenium: Как остановить процесс geckodriver, влияющий на память ПК, без вызова driver.quit ()?

  • Python Solution (Кросс-платформа ):

    import os
    import psutil
    
    PROCNAME = "geckodriver" # or chromedriver or IEDriverServer
    for proc in psutil.process_iter():
        # check whether the process name matches
        if proc.name() == PROCNAME:
            proc.kill()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...