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

时间:2017-12-21 23:40:04

标签: java selenium webdriver selenium-chromedriver selenide

  
      
  • 操作系统:Window 10

  •   
  • 浏览器:Chrome webDriver

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

  •   
  • Selenium Version 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相关的所有代码都有错误::“无法访问异常”。

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

  1. driver!=null代码无效,因为在用户关闭浏览器后驱动程序仍然存在
  2. if((driver.getWindowHandle().equals(""))无效,因为Chrome无法访问异常,因为浏览器已被用户关闭
  3. 我想要做的是检查浏览器是否已经消失,因为用户?

2 个答案:

答案 0 :(得分:4)

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

此异常的最常见原因是:

  1. 提供给RemoteWebDriver的服务器地址无效,因此无法建立连接。
  2. 浏览器在考试中途死亡。
  3. 您可以调用以下方法来验证浏览器是否已关闭。

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

答案 1 :(得分:0)

让我逐一回答你的问题:

  • 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 closure < / strong> Web Browser您无需明确验证是否 Browser is Closed 。交叉检查死 Web Browser Web Browser 会话/家务将是一个纯粹的开销。因此,更好的做法是编写清洁代码

  • Restart the webdriver if there is no browser:应由 Automation Script 通过 WebDriver Web Browser来处理初始化。
  • User close the browser, webdriver is not destroyed:当你 WebDriver Web Browser Automation Script strong>关闭 Web Browser 的用户将是 Malpractice Web Browser 关闭必须由 Automation Script 处理。
  • I want restart the webdriver:您既不能连接到 WebDriver 的上一个实例,也不能连接到 Web Browser <的上一个实例/ strong>即可。您必须按如下方式重新初始化:

    WebDriver driver =  new ChromeDriver();
    
  

有关详细信息,请参阅讨论How can I reconnect to the browser opened by webdriver with selenium?