selenium - 如何杀死保持 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。
解决方案
有几件事:
driver.close()
:用于关闭当前页面或具有焦点的浏览器(如果它是唯一的页面/选项卡)。driver.quit()
:它用于调用 /shutdown 端点,随后WebDriver和WebBrowser实例被优雅地销毁,关闭所有页面/选项卡/窗口。- 您可以在关于此讨论
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