如果测试用例失败,Selenium Web驱动程序无法关闭firefox实例

时间:2013-01-28 12:46:02

标签: java junit4 selenium-webdriver

我真的很喜欢 我正在使用junit与selenium web驱动程序2.28。 问题是如果我运行一个成功的测试用例,web驱动器能够关闭firefox实例,但是当测试用例失败时,selenium web驱动程序无法关闭firefox。 我正在使用FF 15.0.1与selenium-server-standalone-2.28.0.jar。 请回复 谢谢 萨赫勒

private void startWebdriver() throws UIException{
    //2) Prevent re-use.
    if(UIHandlerWD.this.profile == null)
        throw new 
            UIException(
                UIException.Code.UI, 
                    "Webdriver instance cannot be instantiated."
            );              

    //3) Configure Selenium Webdriver.
    if (this.profile.browserType.equalsIgnoreCase("*firefox")){
        FirefoxProfile fProfile = new FirefoxProfile();

       // profile.SetPreference("network.http.phishy-userpass-length", 255);
        fProfile.setAcceptUntrustedCertificates(true);
        DesiredCapabilities dc = DesiredCapabilities.firefox();
        dc.setJavascriptEnabled(true);
        dc.setCapability(FirefoxDriver.PROFILE, fProfile);

        //this.webdriver = new FirefoxDriver(dc);
        this.webdriver = new FirefoxDriver(dc);
    }
    else if (this.profile.browserType=="INTERNETEXPLORER")
        this.webdriver = new InternetExplorerDriver();
    else
        throw new 
        UIException(
            UIException.Code.UI, 
                "Unknown browser type '" + this.profile.browserType +"'."
        );          


    //4) Start Webdriver.
    this.webdriver.get(this.profile.getURL().toString());
    this.webdriver.manage().timeouts().
    implicitlyWait(5, TimeUnit.SECONDS);
    this.webdriver.manage().timeouts().
    pageLoadTimeout(this.profile.timeout, TimeUnit.SECONDS);

}

void stopWebdriver() {
    if(this.webdriver != null){
        try{
        Thread.sleep(5000);
        }
    catch (Exception e) {
        // TODO: handle exception
    }
        this.webdriver.close();
    }
    this.webdriver = null;
    this.profile = null;
}

1 个答案:

答案 0 :(得分:18)

webdriver.quit()添加到@AfterClass方法。

close()将关闭当前活动窗口。如果当前活动窗口是最后一个窗口,则它在功能上等同于执行quit()。

但是,它需要有一个有效的活动会话才能执行此操作。如果你的测试失败,那个会话可能已经死了,所以当你调用close()时,它不知道在哪里发送命令并抛出异常。

quit()将结束所有会话并关闭所有客户端,它基本上是一个清理所有命令。如果所有客户/会话都已关闭/结束,它也不会抛出任何异常。