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

时间:2019-01-17 17:24:39

标签: selenium exception selenium-webdriver exception-handling webdriver

我正在使用Selenium WebDriver开发自动Web单元测试。 我知道我可以在测试后使用http://localhost:3000/ http://example.com:80/ http://example.com/ driver.close()方法关闭浏览器并从内存中释放 chromedriver ,但这对我不利,因为我想要Chrome浏览器将保持打开状态,这样我就可以从自动测试结束的地方继续在网站上工作。

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

如果我能告诉chromedriver.exe在最后一次chrome持久性关闭时终止自身,那将会很棒。正如我所解释的,我无法在语法上这样做,因为测试方法已经结束。

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

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

1 个答案:

答案 0 :(得分:-1)

几件事:

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

  • driver.close():它用于调用/ shutdown端点,随后 WebDriver WebBrowser 实例被优雅地销毁,关闭所有页面/标签/窗口。

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

  • 代码块:

    driver.quit()
  • 控制台输出:

    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")
    
  • 在这里您可以找到有关Manually raising (throwing) an exception in Python

  • 的详细讨论