如果失败,我如何使用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());
}
}
但所有这些都没有实例化驱动程序。它刚从测试步骤离开的地方重新开始。我需要重新开始才能进入下一个测试。请注意,每个类都有一个测试。
答案 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();
}
}
}
步骤是:
注意:如果在重试分析器的情况下未调用@BeforeMethod
,您可以保留以前的@BeforeClass
方法并使用@AfterMethod
方法创建新驱动程序。在这种情况下,只需创建一个驱动程序创建方法以避免代码重复。