【发布时间】:2019-08-01 16:33:17
【问题描述】:
我有每天早上运行的自动化回归测试。目前,它同时启动了几十个线程,每个线程在每个线程中运行自己的 webdriver。
ChromeOptions option = new ChromeOptions();
option.AddArgument("--headless");
IWebDriver driver = new ChromeDriver(option);
try
{
SuiteDriver(driver, suiteTable);
LogMonitor.UEErrorHandling();
}
catch (Exception ex)
{
WritetoLogFile("Exception in Main - " + ex);
}
finally
{
workbook.Dispose();
driver.Quit();
}
当测试完成时,还有一堆 webdriver 实例仍在运行。当我尝试在测试运行结束时使用 driver.Quit() 清理这些时,它关闭的不仅仅是驱动程序在自己的线程中,导致其他测试无法完成。 Driver.Quit() 似乎没有区分由这个实例启动的驱动程序和由测试的其他实例启动的其他驱动程序。
有没有办法确保 driver.Quit() 或 driver.Close() 仅关闭由仅在该线程中运行的特定可执行文件启动的 webdriver 实例?
【问题讨论】:
-
您必须为每个线程使用 ThreadLocal
实例。退出驱动程序时,您将不得不使用线程特定的驱动程序。这方面的例子很多。 -
解释:即使每个线程都有自己的 Chrome 实例,它们都共享驱动浏览器的同一个 chromedriver 可执行文件...当您调用 quit() 时,它会停止 chromedriver 进程和所有来自其他线程的后续请求无法再与浏览器通信。 ——
标签: c# multithreading selenium webdriver