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()