3
  • 操作系统:窗口 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 是 null 状态,

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

因此,在用户关闭浏览器后,所有与 webdriver 相关的代码都会出现错误::“无法访问的异​​常”。

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

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

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

4

2 回答 2

5

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

此异常的最常见原因是:

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

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

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

    return isClosed;
}
于 2017-12-22T05:41:55.837 回答
0

让我一一回答你的问题:

  • What if user close the browser or webdriver: 首先Automated Test Execution不应该被Manual Intervention. 它反对所有Best Practices. 如果你强行关闭Web BrowserthenWebDriver将抛出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句柄正确initiation并且您不需要明确验证是否正确closure。交叉检查死亡和会话/家务将是一个纯粹的开销。所以更好的做法是编写干净的代码Web BrowserBrowser is ClosedWeb BrowserWeb Browser

  • Restart the webdriver if there is no browser: 应该是Automation Script通过WebDriverWeb Browser初始化来处理的。
  • User close the browser, webdriver is not destroyed: 因为你WebDriverWeb Browser通过你开始Automation Script的用户关闭Web Browser将是一个弊端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?

于 2017-12-22T09:03:21.200 回答