有一个测试,像这样:

 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窗口,因为我只想分析一下我拥有的内容,并在测试运行后修复所有需要的内容(我稍后将取消对driver.quit()的注释)。
同时,每次不关闭驱动程序的调用都会导致对我PC上RAM的过度影响(并且没有关系-测试后是否手动关闭浏览器):
java - Selenium:如何在不调用driver.quit()的情况下停止影响计算机内存的geckodriver进程?-LMLPHP

因此,问题是:
有什么方法可以关闭“ 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自动进行操作时,应在quit()中调用tearDown() {}方法。通过发送带有{“ flags”:[“ eForceQuit”]}的“ quit”命令来调用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解决方案(Windows):

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解决方案(Windows):

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

09-10 07:26
查看更多