问题描述
我正在使用 C#/Selenium 3 和 Microsoft Chromium Edge Webdriver 抓取网页,然后将数据传送到另一个应用程序。我需要检查用户是否关闭了网络浏览器。有没有一种快速的方法来做到这一点?我想出了下面的代码,但问题是如果关闭了网络浏览器,那么 _webDriver.CurrentwindowHandle 需要 4 秒或更长时间才能抛出异常。
public bool IsOpen
{
get
{
if (!this._isdisposed)
{
try
{
_ = this._webDriver.CurrentwindowHandle;
return true;
}
catch
{
// ignore.
}
}
return false;
}
}
解决方法
抛出异常需要几秒钟的时间,因为当浏览器关闭时,驱动程序仍然会重试连接浏览器。无法判断浏览器是手动关闭还是自动关闭。
我需要检查用户是否关闭了网络浏览器
自动化浏览器测试不应因人工干预而中断。这违反了所有最佳做法。如果您手动关闭浏览器,WebDriver 将抛出 WebDriverException。因此,您还可以在 try-catch
上使用 WebDriverException
方法来检查浏览器是否可访问。但是抛出异常也需要几秒钟的时间,原因与上述相同。
如果您想阻止用户手动关闭浏览器,您可以在无头模式下使用 Edge,如下所示:
edgeOptions.AddArguments("--headless");