当打开TestNG侦听器时,不执行catch语句

时间:2019-10-25 09:33:06

标签: java testng

我有一个ITestListener来记录测试结果。
在我的定位器类中,如果我尝试处理catch语句中的某些内容,则catch内的任何代码都不会执行。
例如:我正在尝试处理可能会抛出异常的WebElement。当它引发异常时,我应该在catch语句中处理并找到其他元素。由于未执行catch语句,并且发生异常时,应用程序仅停止。
即使TestNG的onTestFailure方法为ON,有没有办法运行catch语句?

请提出解决方案。

//Test Script 
public boolean loginVerification(String username, String password) {

        try {

            utilities.click(helloSignInLink, "elementToBeClickable");
            reportLog("debug","info","Clicked on SignIn link");

            utilities.sendText(loginID, username);
            reportLog("debug","info","Username entered");

            utilities.sendText(passwordID, password);
            reportLog("debug","info","Password entered");

            utilities.click(submit, "elementToBeClickable");
            reportLog("debug","info","Clicked on submit button");

            Thread.sleep(2000);

            isTrue = driver.getTitle().contains("Vectors");

        }

        catch(Exception e) {
            reportLog("debug","info","Unable to login with username : "+username+" , error message : "+e);
            isTrue = false;
        }

        return isTrue;

    }

2 个答案:

答案 0 :(得分:2)

我建议您抓住Throwable-而不仅仅是Exception。另一件事是,当您捕获到某些东西时,例外情况并没有真正出现在堆栈中,因此TestNG将永远不会知道您的测试中是否出现任何错误,并且测试侦听器不会检测到失败。解决异常后,有一种方法可以进一步推动异常。喜欢:

    catch(Throwable e) {
        reportLog("debug","info","Unable to login with username : "+username+" , error message : "+e);
        isTrue = false;
        throw e;
    }

您能纠正您的方法并让我们知道问题是否仍然存在吗?

PS -我也看不到代码中的任何断言。声明结果或异常定义测试结果。

答案 1 :(得分:0)

这意味着您没有捕获相同的错误捕获块。

两者都使用与TimeoutException类似的异常,因此只有在发生TimeoutException时此块才会出现。如果不确定错误,请使用Exception之类的通用异常块,如果发生任何错误,它将确定要执行。在这种情况下,Exception不会仅因为您已经指定了TimeoutException而执行{p>

    try {
        System.out.println("Your code");
    }catch(TimeoutException t) {
        System.out.println(t.getMessage());
    }catch(Exception ex) {
        ex.getStackTrace();
    }