Selenium Webdriver sessionId或检查是否关闭了所有浏览器窗口

Selenium Webdriver sessionId或检查是否关闭了所有浏览器窗口,selenium,webdriver,Selenium,Webdriver,是否有办法查看是否所有浏览器窗口都已关闭?我发现,如果在WebDriver上调用driver.quit()或driver.close(),sessionId将变为null。有办法检查吗 我不想给关闭或退出的驱动程序打电话,因为它会引发WebDriverException。因此,我想在继续之前检查浏览器的状态。刚刚设置好 driver=null; 每次退出浏览器并检查 if (browser!=null){ //Attention: this comand is not supported

是否有办法查看是否所有浏览器窗口都已关闭?我发现,如果在WebDriver上调用driver.quit()或driver.close(),sessionId将变为null。有办法检查吗

我不想给关闭或退出的驱动程序打电话,因为它会引发WebDriverException。因此,我想在继续之前检查浏览器的状态。

刚刚设置好

driver=null; 
每次退出浏览器并检查

if (browser!=null){
  //Attention: this comand is not supported
  //as far as i know ;)
  driver.doSomething();
}


或接收NullPointerException;)

我认为检测所有窗口是否关闭的最干净的方法是smth,如:

boolean allWindowsClosed = webDriver.getWindowHandles().isEmpty();

getWindowHandles为所有打开的窗口返回一组窗口句柄-请参见

当浏览器窗口消失时实际调用getWindowHandles将引发“UnreachableBrowserException”

您必须将调用放入try-catch块并处理该错误。实际上,这是唯一已知的捕捉意外浏览器窗口关闭的工作方式。我在配置类中有一个静态方法来处理驱动程序:我像这样重新启动浏览器:

protected static void loadPages() {

    if (driver == null || driver.toString().contains("null"))  { //null refers to an missing session id

            driver = new FirefoxDriver();

        //load all my page objects like
        loginpage = new LoginPage(driver);
        //....
        //....

        }
try {
        if (driver.getWindowHandles() == null || driver.getWindowHandles().isEmpty()){ //will cause an UnreachableBrowserException if the browser really is not avalable. 
            try { //you actually dont need this try catch block 
                driver.quit();
            } catch (Exception e) {
                System.err.println("Quitting levtover driver did not work.");
            }
            driver = null; //you have to set the driver to null
            loadPages();
            }
    } catch (UnreachableBrowserException ube) {
        driver = null; //like above set to null to make sure no driver left
    }
}

现在,ofc您当前的测试将失败,但您将能够继续进行其余的测试

public bool InstanceExist
    {
        get
        {
            if (Instance != null)
            {
                try
                {
                    return (Instance.WindowHandles != null); // allways returns true if browser instance exist or thrown error
                }
                catch (Exception e)
                {
                    return false;
                    // means that browser was closed by user
                }
            }
            return false; // means that it wasn't created yet or was closed by developer programmally
        }
    }
您需要检查3种情况:

  • 驱动程序未创建
  • 驱动程序已被开发人员关闭
  • 用户已关闭浏览器,但driwer实例仍然存在
  • 所有这些情况都用此代码检查。

    在C中#

    在WebDriver上调用quit()将关闭驱动程序打开的所有窗口。那你想查什么?你所说的“浏览器状态”是什么意思?
    public bool InstanceExist
        {
            get
            {
                if (Instance != null)
                {
                    try
                    {
                        return (Instance.WindowHandles != null); // allways returns true if browser instance exist or thrown error
                    }
                    catch (Exception e)
                    {
                        return false;
                        // means that browser was closed by user
                    }
                }
                return false; // means that it wasn't created yet or was closed by developer programmally
            }
        }
    
        public void BrowserCheck()
        {
            try
            {
                var h = webDriver.WindowHandles;
                return; // no problem
            }
            catch // browser window is closed so re-init it
            {
                webDriver.Quit();
                WebDriverInit(); // your init code 
            }
        }