Testing 测试失败后关闭浏览器

Testing 测试失败后关闭浏览器,testing,selenium,webdriver,testng,qa,Testing,Selenium,Webdriver,Testng,Qa,我正在使用WebDriver运行测试,当测试失败时,浏览器不会关闭。在Windows机器上,这是一个巨大的问题,因为我有几个IEDriver实例仍在后台运行 我尝试了一个try/catch语句,但它似乎也不起作用。如果测试失败,浏览器仍保持打开状态。任何帮助都将不胜感激 try-catch语句如下所示: try { Assert.something(something something dark side); driver.quit(); } catch(Exception e)

我正在使用WebDriver运行测试,当测试失败时,浏览器不会关闭。在Windows机器上,这是一个巨大的问题,因为我有几个IEDriver实例仍在后台运行

我尝试了一个try/catch语句,但它似乎也不起作用。如果测试失败,浏览器仍保持打开状态。任何帮助都将不胜感激

try-catch语句如下所示:

try
{
   Assert.something(something something dark side);
   driver.quit();
}
catch(Exception e)
{
   System.out.println(e)
   driver.quit();
}
我的完整代码如下:

public class ClickAddMedication 
{
Browser browser = new Browser();

public void addMedication(String driverName)
{
    //Open Browser and navigate to page
    WebDriver driver = browser.getDriver(driverName);
    driver.manage().window().maximize();
    driver.get("http://someIP:8080/hmp_patient/index.html");

    //Click Add Medication button
    WebElement addBtn = driver.findElement(By.id("add-btn"));
    addBtn.click();

    //Verify Add Medication page has loaded successfully
    WebElement rxBtn = driver.findElement(By.className("icon-rx"));
    WebElement otcBtn = driver.findElement(By.className("icon-otc"));
    WebElement herbBtn = driver.findElement(By.className("icon-herb"));

    Assert.assertEquals(true, rxBtn.isDisplayed());
    Assert.assertEquals(true, otcBtn.isDisplayed());
    Assert.assertEquals(true, herbBtn.isDisplayed());

    driver.quit();

}

@Test(groups = {"functionalTests.FF"})
public void test_AddMedication_FF()
{
    addMedication("firefox"); 
}
@Test(groups = {"functionalTests.iOS"})
public void test_AddMedication_iOS()
{
    addMedication("iOS");
}
}
我使用testng.xml文件运行测试,并希望关闭浏览器,无论测试是否通过

下面是我的
浏览器
课程:

public class Browser 
{
public WebDriver getDriver(String driverName)
{
    WebDriver driver = null;
    if(driverName == "firefox")
    {
        driver = new FirefoxDriver();
    }
    else if(driverName == "chrome")
    {
        File chromeFile = new File ("C:/webdrivers/chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", chromeFile.getAbsolutePath());
        driver = new ChromeDriver();
    }
    else if(driverName == "ie")
    {
        File ieFile = new File("C:/webdrivers/IEDriverServer.exe");
        System.setProperty("webdriver.ie.driver", ieFile.getAbsolutePath());
        driver = new InternetExplorerDriver();
    }
    else if(driverName == "iOS")
    {
        try 
        {
            driver = new RemoteWebDriver(new URL("http://localhost:3001/wd/hub"), DesiredCapabilities.ipad());
        } catch (MalformedURLException e) 
        {

            e.printStackTrace();
        }
    }


    return driver;

}
}

您没有提到用于执行测试的框架,但处理此问题的一种方法是使用与“测试后”注释等效的注释来完成此操作。JUnit在之后调用此注释,而TestNG在之后调用它。无论测试的通过/失败状态如何,带有测试后注释的方法将在带有
@test
注释的每个方法之后运行。如果您希望在测试方法中使用相同的驱动程序实例,大多数测试运行程序都有一个
@AfterClass
注释或类似注释,它将在类中所有
@test
方法的末尾运行

例如,您可能希望执行以下操作(注意将
驱动程序
变量提升为类中的成员变量):


如果您使用的是Ruby和测试单元,那么您可能会有这样的东西-

如果要为多个测试共享wedriver浏览器会话,并且只需要在测试结束时关闭浏览器

def self.shutdown
    @driver.quit
    assert_equal [], @verification_errors
end
或者,如果要在每次单独测试后关闭浏览器

def teardown
    @driver.quit
    assert_equal [], @verification_errors
end

这可能不是合适的解决方案,但我这样做是为了解决这个问题

而不是
尝试{}catch
。。。使用
throws
throws java.lang.AssertionError
并在catch块中退出浏览器,例如:

public void testMethod() throws java.lang.AssertionError{

Assert.assertTrue(condition,Message);
}

catch(java.lang.AssertionError e){

e.printstactrace();

browser.quit();

Assert.fail();

}
driver.close()应该可以为您实现这一点。或者设置布尔标志,当测试失败时,布尔标志设置为true

然后使用driver.close()或System.exit(1)应该可以工作


如果您在上述解决方法中遇到问题,请与我联系。

谢谢,我会尝试一下。我在使用
@Test
方法后插入了以下内容,但浏览器仍然没有关闭。这是带有TestNG的Java
@postertest public void closeDriver(String driverName){WebDriver driver driver=browser.getDriver(driverName);driver.quit();}
使用上述方法,即使测试通过了
driver.quit()
也不起作用。您需要提供更多的代码来获得更精确的答案,然后。您必须使用
@Test
@postest
方法显示整个类,并提供有关
browser.getDriver()的功能的信息。例如,如果
browser.getDriver(driverName)
启动一个新的浏览器实例,然后它当然不会在您的
@PostTest
方法中工作。感谢您的帮助,我已经编辑了我的问题,以便在其中进行完整的测试。您对测试进行的编辑,您输入了JimEvans答案,因此编辑被拒绝。请在这里把它编辑成你的问题。该死的,我以为我有。
public void testMethod() throws java.lang.AssertionError{

Assert.assertTrue(condition,Message);
}

catch(java.lang.AssertionError e){

e.printstactrace();

browser.quit();

Assert.fail();

}