首页 > 解决方案 > 如何杀死保持 Web 浏览器打开的 WebDriver 实例

问题描述

我正在使用 Selenium WebDriver 开发一个自动 Web 单元测试。我知道我可以使用driver.close()anddriver.quit()方法关闭浏览器并在测试后从内存中释放chromedriver但这对我不利,因为我希望 Chrome 浏览器保持打开状态,以便我能够继续工作自动测试完成的地方的站点。

问题是,当我手动关闭 chrome 浏览器时,chromedriver.exe 停留在机器的内存中并且没有终止,所以在下一次测试中,我将在内存中有另一个 chromedriver.exe,依此类推。

如果我可以告诉 chromedriver.exe 在最后一个 chrome 坚持将关闭时自行终止,那就太好了。正如我所解释的,我不能在语法上这样做,因为测试方法已经结束。

我知道每次执行测试时我都可以遍历所有进程并终止任何活动的 webdriver 进程,但我不喜欢这种方式。

为了清楚起见,我希望自动化直到特定点,然后在自动化部分完成后手动继续。在那一点上,我无法访问要使用的驱动程序实例driver.quit()driver.close()方法。我正在使用 Microsoft.NET TestMethod。

标签: seleniumexceptionselenium-webdriverexception-handlingwebdriver

解决方案


有几件事:

  • driver.close():用于关闭当前页面或具有焦点的浏览器(如果它是唯一的页面/选项卡)。

  • driver.quit():它用于调用 /shutdown 端点,随后WebDriverWebBrowser实例被优雅地销毁,关闭所有页面/选项卡/窗口。

  • 您可以在关于此讨论driver.close()之间和之间的区别中找到详细讨论driver.quit()
  • 即使在调用WebDriver / Web Browser 后,driver.quit()如果WebDriver / Web Browser仍然留在内存中,您也可以在讨论讨论后用蛮力杀死它们
  • 完成自动测试以仅终止ChromeDriver二进制文件并保持Chrome 浏览器保持打开状态后,您可以使用Python raise 关键字,并且可以使用以下(基于 Python)的解决方案:

  • 代码块:

    from selenium import webdriver
    import psutil
    
    driver = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('https://www.google.com/')
    try:
        raise ValueError('Test Execution completed ... Killing the ChromeDriver instance only')
    except Exception as error:
        print('Caught this error: ' + repr(error))
        PROCNAME = "chromedriver.exe" # or geckodriver.exe or IEDriverServer.exe
        for proc in psutil.process_iter():
            # check whether the process name matches
            if proc.name() == PROCNAME:
                proc.kill()
    print("Only ChromeDriver instance was killed and Chrome Browser instance left open")
    
  • 控制台输出:

    Caught this error: ValueError('Test Execution completed ... Killing the ChromeDriver instance only',)
    Only ChromeDriver instance was killed and Chrome Browser instance left open
    
  • 在这里您可以找到有关在 Python 中手动引发(抛出)异常的详细讨论


推荐阅读