Selenium:如何在不调用driver.quit()的情况下停止影响PC内存的geckodriver进程?

有一个测试,像:

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(); //} } 

所以,我使用firefox实例,使用geckodriver并成功运行我的测试。 但是我希望不要在每次运行后关闭firefox窗口,因为我只想分析我拥有的东西,并在测试运行后修复任何需要的东西(我将在稍后的unComment driver.quit())。 同时,每次调用而不关闭驱动程序都会导致我的PC上的RAM过度影响(并且无关紧要 – 我是否在测试后手动关闭浏览器): 在此处输入图像描述

因此,问题是:是否有任何方法可以关闭“geckodriver”的进程(更确切地说 – 执行smth,这将关闭taskmgr中的geckodriver.exe进程),但是在测试完成后不会关闭浏览器? 例如,在测试中添加一些方法,无论如何……这不会影响我的工作/测试本身,我只想添加一些优化。

根据你的问题注释掉driver.quit()只是Not to close firefox window after each run, because I just want to analyse what I have不会成为最佳实践的一部分。

对于任何详细分析,我们可以创建日志条目并拍摄快照。

虽然按照最佳实践通过Selenium自动化,但您应该在tearDown() {}调用quit()方法。 调用quit()通过发送带有{“flags”:[“eForceQuit”]}的 “quit”命令来DELETE当前浏览会话,最后在/ shutdown EndPoint上发送GET请求。 以下是一个示例:

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