【问题标题】:selenium: What if user close the browser or webdriver? how can I detect if the browser is closed?selenium:如果用户关闭浏览器或网络驱动程序怎么办?如何检测浏览器是否关闭?
【发布时间】:2018-06-04 16:12:36
【问题描述】:
  • 操作系统:窗口 10

  • 浏览器:Chrome webDriver

  • 浏览器版本:Chrome 63.0.3239.10(64bit)

  • 硒版本 2.44

添加以下依赖项:

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>2.44.0</version>
</dependency>

预期行为 -

我想检查驱动是否被用户直接关闭,如果没有浏览器则重新启动webdriver。

Driver webdriver = new ChromeDriver() 编码之前,webdriver 为空状态,

Driver webdriver = new ChromeDriver()代码完成后,即使用户关闭浏览器,webdriver也不会被破坏。

所以,用户关闭浏览器后,所有与 webdriver 相关的代码都会出现错误:: "unreachable Exception"。

如果浏览器被用户关闭,我想重新启动 webdriver,但我无法检测到这种情况。

  1. driver!=null代码不起作用,因为用户关闭浏览器后驱动程序仍然存在
  2. if((driver.getWindowHandle().equals("")) 不起作用,因为 Chrome 无法访问异常,因为浏览器已被用户关闭

我想做的是检查浏览器是否因为用户而消失了?

【问题讨论】:

  • 嗨。你检查过这个答案吗?你可以使用 toString() 方法找到一些东西 (driver.toString().contains("null")) stackoverflow.com/questions/27616470/…
  • 但我仍然不清楚的是我们如何检查浏览器是否被用户关闭... Selenium 会关闭它,但不像“真正的用户” .

标签: java selenium webdriver selenium-chromedriver selenide


【解决方案1】:

您可以对驱动程序对象执行任何操作,如果它抛出 UnreachableBrowserException,则与浏览器通信存在问题。

此异常的最常见原因是:

  1. 提供给 RemoteWebDriver 的服务器地址无效,因此无法建立连接。
  2. 浏览器在测试中死机。

您可以调用以下方法来验证浏览器是否关闭。

public boolean isBrowserClosed(WebDriver driver)
{
    boolean isClosed = false;
    try {
        driver.getTitle();
    } catch(UnreachableBrowserException ubex) {
        isClosed = true;
    }

    return isClosed;
}

【讨论】:

    【解决方案2】:

    让我一一回答你的问题:

    • What if user close the browser or webdriver :首先 Automated Test Execution 不应被 Manual Intervention 打断。这违反了所有 Best Practices。如果你强行关闭 Web Browser 那么 WebDriver 将抛出 org.openqa.selenium.WebDriverException 如下:

      Exception in thread "main" org.openqa.selenium.WebDriverException: Process unexpectedly closed with status: 0
      Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T19:05:32.194Z'
      System info: host: 'foo', ip: 'foo', os.name: 'foo', os.arch: 'foo', os.version: 'foo', java.version: 'foo'
      Driver info: driver.version: FirefoxDriver
      remote stacktrace: stack backtrace:
         0:           0x47e934 - <no info>
         1:           0x47f0a3 - <no info>
         2:           0x442649 - <no info>
         3:           0x449cc3 - <no info>
         4:           0x42a890 - <no info>
         5:           0x406f5e - <no info>
         6:           0x40cfc9 - <no info>
         7:           0x6bef19 - <no info>
         8:           0x420756 - <no info>
         9:           0x6b96e0 - <no info>
        10:      0x7fa0fb01842 - BaseThreadInitThunk
      
    • How can I detect if the browser is closed? :如果 Automation Script 处理正确的 initiationclosureWeb Browser 你不需要明确验证是否 Browser is Closed。交叉检查死亡 Web BrowserWeb Browser 会话/家务将是纯粹的开销。所以更好的做法是编写 Clean Code

    • Restart the webdriver if there is no browser :应该由 Automation ScriptWebDriverWeb Browser 初始化处理。
    • User close the browser, webdriver is not destroyed :当您 WebDriverWeb Browser 是通过您启动 Automation Script 时,用户关闭了 @987654346 @ 将是 渎职Web Browser 闭包必须由 Automation Script 处理。
    • I want restart the webdriver :您既不能连接到以前的 WebDriver 实例,也不能连接到以前的 Web Browser 实例。您必须重新初始化,如下所示:

      WebDriver driver =  new ChromeDriver();
      

    详情请参阅讨论How can I reconnect to the browser opened by webdriver with selenium?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-19
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 2021-11-06
      • 2015-03-22
      相关资源
      最近更新 更多