Java Testng在Testng.xml中使用组时忽略@AfterMethod调用

Java Testng在Testng.xml中使用组时忽略@AfterMethod调用,java,testing,testng,qa,Java,Testing,Testng,Qa,所以我有一个测试,它有以下代码: public class ViewLineList { Browser browser = new Browser(); WebDriver driver; public void viewLineList(String driverName) { driver = browser.getDriver(driverName); //Navigate to System Facing driver.manage().window(

所以我有一个测试,它有以下代码:

public class ViewLineList 
{

Browser browser = new Browser();
WebDriver driver;


public void viewLineList(String driverName)
{
    driver = browser.getDriver(driverName);

    //Navigate to System Facing
    driver.manage().window().maximize();
    driver.navigate().to("URL GOES HERE");
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);


    //Verify Line List is present
    WebElement lineList = driver.findElement(By.xpath("/html/body/div/div/div/div/form/div/div[2]/div/div[2]/div"));
    Assert.assertNotNull(lineList, "The Line List is empty");
    Assert.assertEquals(true, lineList.isDisplayed(), "The line list is not displayed");

    //Verify Columns are present

    WebElement poEligibleColumn = driver.findElement(By.linkText("PO Eligible"));
    WebElement patientColumn = driver.findElement(By.linkText("Patient/SSN"));
    WebElement wardColumn = driver.findElement(By.linkText("Ward/Room"));
    WebElement drugColumn = driver.findElement(By.linkText("Drug"));
    WebElement dosageColumn = driver.findElement(By.linkText("Dosage"));
    WebElement startDateColumn = driver.findElement(By.linkText("Start Date"));
    WebElement nextDoseColumn = driver.findElement(By.linkText("Next Dose"));
    WebElement lastReviewDateColumn = driver.findElement(By.linkText("Last Review Date"));
    WebElement reviewerColumn = driver.findElement(By.linkText("Reviewer"));
    WebElement toolsColumn  = driver.findElement(By.linkText("Tools"));

    Assert.assertEquals(true, poEligibleColumn.isDisplayed(), "The PO Eligible column is not present");
    Assert.assertEquals(true, patientColumn.isDisplayed(), "The Patient column is not present");
    Assert.assertEquals(true, wardColumn.isDisplayed(), "The Ward column is not present");
    Assert.assertEquals(true, drugColumn.isDisplayed(), "The Drug column is not present");
    Assert.assertEquals(true, dosageColumn.isDisplayed(), "The Dosage column is not present");
    Assert.assertEquals(true, startDateColumn.isDisplayed(), "The Start Date column is not present");
    Assert.assertEquals(true, nextDoseColumn.isDisplayed(), "The Next Dose column is not present");
    Assert.assertEquals(true, lastReviewDateColumn.isDisplayed(), "The Last Review Date column is not present");
    Assert.assertEquals(true, reviewerColumn.isDisplayed(), "The Reviewer column is not present");
    Assert.assertEquals(true, toolsColumn.isDisplayed(), "The Tools column is not present");

}

//Tests - Run these
@Test(groups = {"functionalTests.FF"})
public void test_ViewLineList_FF() 
{
    viewLineList("firefox");
}

@Test(groups = {"functionalTests.IE"})
public void test_ViewLineList_IE() 
{
    viewLineList("ie");
}
@AfterMethod
public void tearDown()
{
    driver.quit();
}
}
当我从上面的类运行测试时,
@AfterMethod
工作正常。当我从testng.xml调用该类时,问题就出现了。详情如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 <suite name="Suite" parallel="none">
  <test name="Test" preserve-order="true">
    <groups>
     <run>
       <include name="functionalTests.FF"/>
       <exclude name="functionalTests.IE"/>
       <exclude name="functionalTests.iOS"/>    
     </run>
    </groups> 
    <classes>
     <class name="ui_Tests.ViewLineList"/> 
     <!-- <class name="ui_Tests.ViewLineListResolutions"/>
     <class name="ui_Tests.InteractWithLineList"/> 
     <class name="ui_Tests.POEligibleTests"/> 
     <class name="ui_Tests.DisableColumns"/> 
     <class name="ui_Tests.ExpandCollapseBars"/> 
     <class name="ui_Tests.BarGraphs"/> -->
   </classes>    
</test> <!-- Test -->
</suite> <!-- Suite -->


如果从XML文件运行测试,则忽略
@AfterMethod
。我同样尝试了
@AfterTest
@AfterClass
,当测试失败时,它们似乎都被忽略了。

您的
@AfterMethod
没有运行,因为它不在您正在运行的组中。 您可以指定组,也可以告诉它始终运行

@AfterMethod(groups = {"functionalTests.FF"})


您很可能希望使用
alwaysRun=true

无论发生什么情况,它们都应该运行..您确定它们没有被执行吗?你试过添加一些日志记录来确定吗?@PeterLiljenberg嗯,
@AfterMethod
等应该运行,不管通过/失败的情况如何,这意味着web浏览器应该关闭。事实并非如此。
@AfterMethod(alwaysRun = true)