我正在使用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端点,随后WebDriver和Web浏览器实例被正常销毁,关闭所有页面/选项卡/窗口。 - 您可以在中找到关于
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 中手动引发(抛出)异常的详细讨论