当我收到异常时,测试运行立即结束,并且跳过任何后续测试验证。我想抓住异常,处理它,然后继续工作流程。
在下面的示例中,如果objPage.Method1();
引发异常,则整个@Test
会立即结束。我希望执行catch
,然后转到objPage.Method2()
。
@Test (enabled=true)
public void MyClientsFunctions() throws Exception {
ExtentTest t = ReportFactory.getTest();
try {
Login objPage = new PageObject(driver);
//this method throws exception
objPage.Method1();
if (x=y)
t.log(LogStatus.PASS, "Pass message");
else
t.log(LogStatus.FAIL,"Fail message"+ screenshotMethod());
objPage.Method2();
if (a=b)
t.log(LogStatus.PASS, "Pass message");
else
t.log(LogStatus.FAIL,"Fail message"+ screenshotMethod());
} catch (Exception e) {
t.log(LogStatus.ERROR, "Exception found: " + e.getMessage() + screenshotMethod());
}
}
我正在使用PageFactory和ExtentReports。我使用if
语句来报告失败。没有断言。我相信如果断言失败,结果是一样的,测试结束。
答案 0 :(得分:0)
在最后一个块中写下objPage.Method2()然后它将执行。
答案 1 :(得分:0)
感谢@JeffC指出我正确的方向。
对于我的情况,我至少有十几个从Page Object类调用的动作方法。我不能把它们都放在自己的最后一块中。
我所做的是将每个工作流程(一个或多个方法,然后验证)放在它自己的try / catch中。该catch包括日志/屏幕截图,然后重定向到下一个工作流需要执行的页面。所以,我们尝试/ catch(登录),尝试/捕获(enterHoursWorked)等......正如其他人所说,它很难看,但在我的情况下它是有效的。现在异常被添加到日志中,下一个工作流将执行
public void MyClientsFunctions() throws Exception {
ExtentTest t = ReportFactory.getTest();
try {
Login objPage = new PageObject(driver);
// this method throws exception
try {
objPage.Login();
if (x = y)
t.log(LogStatus.PASS, "Pass message");
else
t.log(LogStatus.FAIL, "Fail message" + screenshotMethod());
} catch (Exception e) {
t.log(LogStatus.ERROR, "Exception found: " + e.getMessage() + screenshotMethod());
objPage.BackToHomePage();
}
try {
objPage.EnterHoursWorked();
if (a = b)
t.log(LogStatus.PASS, "Pass message");
else
t.log(LogStatus.FAIL, "Fail message" + screenshotMethod());
} catch (Exception e) {
t.log(LogStatus.ERROR, "Exception found: " + e.getMessage() + screenshotMethod());
objPage.BackToHomePage();
}
} catch (Exception e) {
t.log(LogStatus.ERROR, "Exception found: " + e.getMessage() + screenshotMethod());
}
}