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

Есть тест, что-то вроде:

 import //needed imports

 public class TestClass{
    WebDriver driver;

    @Before
    public void setUp() {
       //some code
    }

    @Test
    public void test1() {
       //some code, including init of driver (geckodriver)
    }

   //@After
   // public void tearDown() {
   //  driver.quit();
   //}
}

Итак, я запустил geckodriver и успешно выполнил свои тесты, используя экземпляры Firefox. Но я хочу не закрывать окно firefox после каждого запуска, потому что я просто хочу проанализировать то, что у меня есть, и исправить все необходимое после пробного запуска (я собираюсь позже разкомментировать драйвер.quit()). В то же время каждый вызов без закрытия драйвера приводит к чрезмерному влиянию ОЗУ на моем ПК (и не имеет значения - закрывал ли я браузер вручную или нет после тестирования):

Итак, вопрос: есть ли способ закрыть процесс (точнее - сделать что-то, что закроет процесс geckodriver.exe в taskmgr) "geckodriver", но НЕ закроет браузер после завершения теста? например, добавление какого-либо метода в сам тест, что угодно... Это не влияет на мою работу / сам тест, я просто хочу добавить некоторую оптимизацию.

1 ответ

Решение

По вашему вопросу, комментируя driver.quit() просто Not to close firefox window after each run, because I just want to analyse what I have не будет частью лучших практик.

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

При автоматизации через Selenium в соответствии с лучшими практиками, вы должны ссылаться на quit() метод в пределах tearDown() {}, Вызов quit()DELETEтекущий сеанс просмотра путем отправки команды "quit" с помощью {"flags":["eForceQuit"]} и, наконец, отправляет запрос GET на /shutdown EndPoint, Вот пример ниже:

1503397488598   webdriver::server   DEBUG   -> DELETE /session/8e457516-3335-4d3b-9140-53fb52aa8b74 
1503397488607   geckodriver::marionette TRACE   -> 37:[0,4,"quit",{"flags":["eForceQuit"]}]
1503397488821   webdriver::server   DEBUG   -> GET /shutdown

Так что на призыв quit() метод Web Browser сессия и WebDriver Экземпляр убит полностью. Следовательно, вам не нужно включать какие-либо дополнительные шаги, которые будут накладными расходами.


Ответ на этот вопрос:

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

  • Решение Java (специфично для WindowsOS):

    import java.io.IOException;
    
    public class Kill_ChromeDriver_GeckoDriver_IEDriverserver 
    {
        public static void main(String[] args) throws Exception 
        {
            Runtime.getRuntime().exec("taskkill /F /IM geckodriver.exe /T");
            Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe /T");
            Runtime.getRuntime().exec("taskkill /F /IM IEDriverServer.exe /T");
        }
    }
    
  • Решение Python (специфично для WindowsOS):

    import os
    os.system("taskkill /f /im geckodriver.exe /T")
    os.system("taskkill /f /im chromedriver.exe /T")
    os.system("taskkill /f /im IEDriverServer.exe /T")
    
  • Решение Python (кроссплатформенное):

    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()
    
Другие вопросы по тегам