如果在自动测试期间意外关闭浏览器,则需要重新打开浏览器

时间:2016-01-29 13:18:54

标签: java session selenium selenium-chromedriver

我是Java新手,有一个重要问题。 所以我有一个带有“开始测试”按钮的Java框架,在btn点击 - > chromedriver已初始化,Chrome正在开始测试。如果浏览器窗口关闭但Frame仍然打开/可见 - 我想再次单击“运行测试”并再次打开浏览器窗口。 但似乎在关闭浏览器窗口时 - 浏览器会话ID不再有效,我有一个例外: Chrome无法访问。(会话信息:chrome = 49.0.2623.23)(驱动程序信息:chromedriver = 2.15.322448,platform = Windows NT 6.1 SP1 x86_64)
系统信息:host:ip:'192.168.69.3',os.name:'Windows 7',os.arch:'amd64',os.version:'6.1',java.version:'1.7.0_55' 会话ID:934535b637b44a82c3482cc2b58471d6 司机信息:org.openqa.selenium.chrome.ChromeDriver

这是我的初始化webDriver类:

public class TestBase {
  public static WebDriver driver = null;

public static WebDriver getDriver() {
        if (driver == null) {
           if (Config.getProperty("browser").equalsIgnoreCase("Chrome")) {

           File fileChrome = new File("src//test/java/chromedriver.exe");
            System.setProperty("webdriver.chrome.driver", fileChrome.getAbsolutePath());
            DesiredCapabilities chrome = DesiredCapabilities.chrome();

            try {
                driver = new ChromeDriver(chrome);
            } catch (Exception e) {
                throw new RuntimeException(e);
                }

            } else {
            System.out.println("Can't get any browser");
          }
       }
    return driver;
}

这就是我在测试中调用此方法的方法:

login = PageFactory.initElements(TestBase.getDriver(), Login.class);        
login.test1();

我认为我需要在测试开始时生成一个唯一的会话ID,并最终将其终止。或者我可能应该检查Chrome是否打开,如果没有 - 再次启动驱动程序,IDK。 请帮我解决这个问题或建议一些事情。我将非常感谢您的帮助或建议。感谢

1 个答案:

答案 0 :(得分:0)

所以,经过一些尝试,我得到了答案。

添加了一个healthCheck方法,该方法检查驱动程序是否还活着。

emulator

然后,在我的chromeDriver开始使用单例的getDriver()方法中,我添加了使用新方法的简单检查:

private static boolean healthCheck(){
    try{
        driver.getTitle().equals(null); 
    }catch(Exception ex){
        System.out.println("Browser closed");
        return false;
    }

    return true;
}

并且在使用sigleton之后 - 驱动程序开始了。

if (driver != null){
        if(healthCheck()){
            return driver;
        }
        driver = null;
    }

现在,如果浏览器被用户意外关闭,程序将转到healthCheck()方法,并将再次重新打开它。在这种情况下," Chrome无法访问" -exception消失。