Selenium Webdriver Testng:如何使断言测试失败并在报告中发送有意义的消息,而不是“ Nosuchelementexception”跟踪

时间:2018-08-04 03:55:35

标签: selenium-webdriver webdriver

他们在互联网上有大量资源,但是我找不到解决我问题的简单方法。

我希望测试用例失败,并报告一条有意义的消息,而不是完整的堆栈跟踪。

我尝试使用try,catch,if,else,但是我希望我的测试失败,不要通过并抛出消息。

场景-加载url,如果url未加载则抛出错误并中止测试并转到加载下一个url的下一个迭代

任何解决方案吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试... try catch

try {
    doStuff();//this code is failing
}
catch (YourExpectedException e){ //catch the correct exception here
    //this passes your custom message AND the caught exception
    //should also stop the test
    throw new AssertionError("This is my custom message", e); 
}

答案 1 :(得分:0)

有两种方法可以做到这一点。我想向您推荐最简单,最漂亮的方法。

1)检查异常,如果您指定了异常,则将执行一些代码或执行某些操作。这是示例:

@AfterMethod
public void afterMethod(ITestResult result) throws IOException {
    Throwable exception = result.getThrowable();
    if (exception instanceof org.openqa.selenium.TimeoutException
            ||
            exception instanceof org.openqa.selenium. NoSuchElementException) {
        Assert.fail("Some message or code");
    }
}

2) 您可以在项目中实现 WebDriverEventListener

是什么意思?

这意味着WebDriver允许在某些事件之前和之后执行一些逻辑。您可以在方法的实现中添加try-catch。

示例:

    @Override
    public void beforeFindBy(By by, WebElement webElement, WebDriver webDriver) {
      // your code
}

    @Override
    public void afterFindBy(By by, WebElement webElement, WebDriver webDriver) {
      // your code
}

    @Override
    public void beforeClickOn(WebElement webElement, WebDriver webDriver) {
      // your code
}

    @Override
    public void afterClickOn(WebElement webElement, WebDriver webDriver) {
      // your code
}

这里是更详细的示例:link