如何杀死保持Web浏览器打开的WebDriver实例



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

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

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

我知道每次执行测试时,我都可以遍历所有进程,并杀死任何活动的网络驱动程序进程,但我不喜欢这种方式。

只是为了让事情变得清楚,我希望自动化直到某个特定的点,然后在自动化部分完成后手动继续。在这一点上,我无法访问驱动程序的实例来使用driver.quit()driver.close()方法。我使用的是Microsoft.NET测试方法。

两件事:

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

  • driver.quit():它用于调用/shutdown端点,随后WebDriverWeb浏览器实例被正常销毁,关闭所有页面/选项卡/窗口。

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

  • 代码块:

    from selenium import webdriver
    import psutil
    driver = webdriver.Chrome(executable_path=r'C:UtilityBrowserDriverschromedriver.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 中手动引发(抛出)异常的详细讨论

最新更新