我正在使用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。
答案 0 :(得分:-1)
几件事:
ObjectMapper
:用于关闭当前页面或具有焦点的浏览器(如果是唯一的页面/选项卡)。
driver.close()
:它用于调用/ shutdown端点,随后 WebDriver 和 WebBrowser 实例被优雅地销毁,关闭所有页面/标签/窗口。
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