如何使TestNG继续在异常上执行测试?

时间:2016-12-08 19:15:19

标签: java selenium selenium-webdriver testng pageobjects

当我收到异常时,测试运行立即结束,并且跳过任何后续测试验证。我想抓住异常,处理它,然后继续工作流程。

在下面的示例中,如果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语句来报告失败。没有断言。我相信如果断言失败,结果是一样的,测试结束。

2 个答案:

答案 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());
    }
}