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

标签 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());
  }
}

但是所有这些都没有实例化驱动程序。它只是从测试步骤离开的地方重新开始。在进入下一个测试之前我需要重新开始。请注意,每个类(class)都有一个测试。

最佳答案

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

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. 如果测试失败,请删除驱动程序

注意:如果重试分析器时未调用@BeforeMethod,您可以保留之前的@BeforeClass方法并在中创建新的驱动程序@AfterMethod 方法。只需创建一个驱动程序创建方法即可避免在这种情况下出现代码重复。

关于java - 如何使用 TestNG RetryAnalyzer 调用新实例驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41863111/

相关文章:

java - 无法在 Selenium WebDriver 3.6 中拖放

python - 如何使用 selenium 在 Twitter 登录页面中单击下一步 - Python

Maven Spring 测试中的 springTestContextBeforeTestMethod 失败

maven - 在 Jenkins 上运行 Maven Webdriver Testng 测试,无法识别的错误

Selenium Grid 支持 Selenium 2?

java - webdriver中使用TestNG框架实现登录

java - 多级继承 "is-a"关系?

几何基元的 Java 算法

java - 无法解析 com.google.gms :google-services:3. 0.0

java - 如何检查字符串的前 n 个字节是否为零?