Selenium webdriver Selenium Webdriver Testng:如何在断言中测试失败,并在报告中发送有意义的消息,而不是;“非接触性异常”;追踪

Selenium webdriver Selenium Webdriver Testng:如何在断言中测试失败,并在报告中发送有意义的消息,而不是;“非接触性异常”;追踪,selenium-webdriver,webdriver,Selenium Webdriver,Webdriver,他们在互联网上有很多资源,但我找不到一个简单的答案来解决我的问题 我希望我的测试用例失败,并报告一行有意义的消息,而不是完整的堆栈跟踪 我尝试使用try、catch、if、else,但我希望我的测试失败,不能通过并抛出消息 场景-加载url,若url未加载,则抛出错误并中止测试,并移动到加载下一个url的下一个迭代 有什么解决办法吗?你可以试试尝试捕捉 try { doStuff();//this code is failing } catch (YourExpectedExceptio

他们在互联网上有很多资源,但我找不到一个简单的答案来解决我的问题

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

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

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


有什么解决办法吗?

你可以试试<代码>尝试捕捉

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) 检查异常,如果您指定了异常,您将执行某些代码或执行某些操作。以下是一个例子:

@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");
    }
}
(二) 您可以在项目中实现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
}

下面是一个更详细的示例:

我尝试了这个方法,但报告中仍然显示“NoTouchElementException”跟踪。如何摆脱它,只打印自定义消息?我不知道是否可能,也不应该仅仅通过指定一些标志或属性就可以实现。你想要追踪。在这里查找可以排除异常的自定义TestListener。您可以通过添加另一行来检查它是否属于您的异常类型。谢谢,但是对于像我这样的初学者来说,理解这个概念可能需要一些时间,我已经阅读了完整的教程,但仍然不知道怎么做,我将尝试再次阅读。首先,您可以尝试使用这种方法添加日志记录。创建一个类,该类将实现WebDriverEventListener,重写所有需要的方法并添加日志记录。示例:我已经在我的框架中使用了reporter.log,只是它没有失败的状态,而是按照代码记录状态(元素启用/存在或不在网页上),我想有一些东西,断言失败不会抛出stacktrace,而是自定义消息。您好,我添加了新的方法。我想这条路最好。您可以检查异常并执行一些逻辑或执行Assert.fail();请检查。你们有相同的解决方案吗?