我已经添加了testListener类和测试代码,但是即使testNG类中的调用方法发生异常,ITestResult
状态也显示为Success并进入onTestSuccess(ITestResult tr)
方法。
testNG类
@Test (invocationCount=1)
public void offersPageRefresh()
{
//Some steps
cart.selectAndVerifyOffersBanner();
}
购物车页面类
public void selectAndVerifyOffersBanner()
{
try {
//Some steps.
moveToElement(selectOffersButton_MobileSite,driver);
ExtentTestManager.getTest().log(LogStatus.PASS, "Offers banner selected and verified successfully.");
} catch (WebDriverException | InterruptedException e) {
ExtentTestManager.getTest().log(LogStatus.FAIL, "Offers banner selection and verification Failed.");
e.printStackTrace();
}
}
现在,如果不存在selectOffersButton_MobileSite
元素,它将抛出NoSuchElementException
并进入catch块,并且记录器将正确打印故障消息。但是在完成offersPageRefresh()
时,ITestResult返回成功状态,然后转到onTestSuccess(ITestResult tr)
,并将测试状态显示为“通过”。
为了解决此特定情况,需要进行哪些更改。请提出建议并先谢谢。
答案 0 :(得分:0)
在selectAndVerifyOffersBanner()
,您可以使用try/catch
处理异常,因此现在没有异常,您可以测试显示为合格。
在catch
中,完成日志记录后,抛出与处理类似的异常
throw e;
或
throw new Exception(e.getMessage()); //it create a new Exception object and throw it
然后测试将失败。
答案 1 :(得分:0)
ITestResult
根据处理方式给出@Test
的结果。
如果@Test
已被try/catch
块处理,则意味着我们允许继续执行测试。并且如果引发异常,则由catch
块处理。因此,由于@Test
的处理,此处try/catch
的故障未显示出来。
如果要通过ITestResult
跟踪异常,则需要避免进行try/catch
处理。