首页 > 解决方案 > 如果浏览器打开,请检查 Selenium

问题描述

我正在使用 C#/Selenium 3 和 Microsoft Chromium Edge Webdriver 来抓取网页,然后将数据传送到另一个应用程序。我需要检查用户是否关闭了网络浏览器。有没有一种快速的方法来做到这一点?我想出了下面的代码,但问题是如果 Web 浏览器关闭,那么 _webDriver.CurrentWindowHandle 需要 4 秒或更长时间才能引发异常。

public bool IsOpen
{
    get
    {
        if (!this._isDisposed)
        {
            try
            {
                _ = this._webDriver.CurrentWindowHandle;
                return true;
            }
            catch
            {
                // ignore.
            }
        }

        return false;
    }
}

标签: c#microsoft-edgeselenium-edgedriverselenium3

解决方案


抛出异常需要几秒钟,因为当浏览器关闭时,驱动程序仍然会重试连接到浏览器。它无法判断浏览器是手动关闭还是自动关闭。

我需要检查用户是否关闭了网络浏览器

自动化浏览器测试不应被人工干预中断。这与所有最佳实践背道而驰。如果您手动关闭浏览器,WebDriver 将抛出WebDriverException。因此,您还可以使用try-catch方法 onWebDriverException检查浏览器是否可访问。但是抛出异常也需要几秒钟的时间,原因与上述相同。

如果要防止用户手动关闭浏览器,可以在无头模式下使用 Edge,如下所示:

edgeOptions.AddArguments("--headless");

推荐阅读