如何使用TestNG RetryAnalyzer调用新的实例驱动程序

时间:2017-01-25 22:47:17

标签: java selenium-webdriver testng

如果失败,我如何使用Selenium WebDriver在TestNG中重试测试?

我使用过retryAnalyser。它的工作原理但不是我想要的方式。我想实例化一个新的Web驱动程序实例:"从测试开始" 开始测试用例。

请注意,Web驱动程序的实例化位于@BeforeClass。此@BeforeClass@Test类不在同一个类中。它位于另一个班级。具有@Test的类继承具有@BeforeClass的类以及所有其他注释。

这里是一个样本模型:

public class A {
  @BeforeClass(alwaysRun = true)
  public void setUp() {
    driver = new InternetExplorerDriver();
    driver.get(C.getURL());
    driver.switchTo().frame("top_frame");
    driver.manage().window().maximize();
  }    

  @AfterClass(alwaysRun = true)
  public void tearDown(ITestContext textContext) throws IOException {
    report.flush();
    driver.quit();          
  }    
}

//这是测试类

@Test(retryAnalyzer = StartWebDriver.class)
public class TestCase extends StartWebDriver{
  @Test(testName = "Login to Application ")
  public void loginTestCase() {
    login.setUserName(C.getUSER_NAME());
    login.setPassword(C.getPASSWORD());
    login.clickLogin();
    deskTopMenu.newClaimClick();
    Assert.assertTrue(findPolicyPage.searchButton().isDisplayed()); 
  }
}

请注意,我已经编写了一个重试分析器类并覆盖了它的方法。我只是没有放入示例代码。现在,我尝试了许多没有成功的事情。

例如,我已将注释移动到类级别而不是测试级别。我也在班级A中创建了这个,如:

@BeforeSuite(alwaysRun = true)
public void beforeSuite(ITestContext context) {
  for (ITestNGMethod method : context.getAllTestMethods()) {
    method.setRetryAnalyzer(new StartWebDriver());
  }
}

但所有这些都没有实例化驱动程序。它刚从测试步骤离开的地方重新开始。我需要重新开始才能进入下一个测试。请注意,每个类都有一个测试。

1 个答案:

答案 0 :(得分:1)

您可以更改驱动程序实例化逻辑,如:

public class A {
  @BeforeMethod(alwaysRun = true)
  public void setUp() {
    if (driver = null) {
      driver = new InternetExplorerDriver();
      driver.get(C.getURL());
      driver.switchTo().frame("top_frame");
      driver.manage().window().maximize();
    }
  }

  @AfterMethod(alwaysRun = true)
  public void afterMethod(ITestResult result) {
    if (result.getStatus() = FAILURE) {
       driver.quit();
       driver = null;
    } 
  }    

  @AfterClass(alwaysRun = true)
  public void tearDown(ITestContext textContext) throws IOException {
    report.flush();
    if (driver != null) {
      driver.quit();       
    }   
  }    
}

步骤是:

  1. 如果尚未完成,请创建一个驱动程序
  2. 运行测试
  3. 如果测试失败,请删除驱动程序
  4. 注意:如果在重试分析器的情况下未调用@BeforeMethod,您可以保留以前的@BeforeClass方法并使用@AfterMethod方法创建新驱动程序。在这种情况下,只需创建一个驱动程序创建方法以避免代码重复。