java - Selenium : How to stop geckodriver process impacting PC memory, 不调用 driver.quit()?

标签 java python selenium firefox 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();
   //}
}

因此,我启动了 geckodriver,并使用 firefox 实例成功运行了我的测试。 但我不想在每次运行后关闭 Firefox 窗口,因为我只想分析我所拥有的内容,并在测试运行后修复任何需要的内容(稍后我将取消注释 driver.quit() )。 同时,每次调用而不关闭驱动程序都会导致对我的电脑上的 RAM 产生过度影响(并且无关紧要 - 在测试后我是否手动关闭浏览器): enter image description here

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

最佳答案

根据您的问题,注释driver.quit()只是每次运行后不要关闭firefox窗口,因为我只是想分析我所拥有的内容不会成为最佳实践的一部分。

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

根据最佳实践通过 Selenium 进行自动化时,您应该在 tearDown() {} 中调用 quit() 方法。通过使用 {"flags":["eForceQuit"]} 发送 "quit" 命令来调用 quit() DELETE 当前浏览 session ,最后在 /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 session 和 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()
    

关于java - Selenium : How to stop geckodriver process impacting PC memory, 不调用 driver.quit()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51883594/

相关文章:

Java LinkedList ListIterator 行为

Python - 可从多个模块访问的全局串行对象实例

python - Pandas python,工作簿编码类型是什么?

java - 在使用处理库的 Java 应用程序中使用 updatePixels() 时遇到问题

java - 如何将文本字段中输入的文本从另一帧获取到第二帧?

java - 如何检查元素何时在 Selenium 中将其状态从启用更改为禁用

python - 网络驱动程序,Python : How to catch dynamically updating url with the appropriate value and save it to the variable

php - 如何从命令行运行用 PHP 编写的 Selenium 测试

java - 在带有 JavaFX 的 Java 中使用命令行参数

python - InternalError : (pymysql. err.InternalError) (1193, "Unknown system variable ' transaction_isolation'")