selenium:如果用户关闭浏览器或webdriver会怎么样?如何检测浏览器是否已关闭?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium:如果用户关闭浏览器或webdriver会怎么样?如何检测浏览器是否已关闭?相关的知识,希望对你有一定的参考价值。

  • 操作系统:窗口10
  • 浏览器:Chrome webDriver
  • 浏览器版本:Chrome 63.0.3239.10(64位)
  • Selenium版本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无法访问异常,因为浏览器已被用户关闭

我想要做的是检查浏览器是否已经消失,因为用户?

答案

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

此异常的最常见原因是:

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

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

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

让我逐一回答你的问题:

  • 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处理initiation的正确closureWeb Browser,你不需要明确验证是否Browser is Closed。交叉检查死Web 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?

以上是关于selenium:如果用户关闭浏览器或webdriver会怎么样?如何检测浏览器是否已关闭?的主要内容,如果未能解决你的问题,请参考以下文章

Python Selenium在浏览器关闭时检测

selenium模块

selenium模块

selenium介绍

Selenium之firefox浏览器的启动

python3+selenium3遇到的问题:Exception ignored in: <bound method Service.__del__ of <selenium.webdri