使用jUnit,Selenium Webdriver并继续脚本,在测试失败时打印有意义的消息

时间:2014-01-14 09:25:39

标签: java selenium junit jenkins hamcrest

原谅初学者的问题。我有一个Webdriver脚本(Java,JUnit4),它测试了许多非常相似的常用元素网页。

有些网页上有日期,有些则没有。对于那些没有的,我想测试结果打印“当前日期不显示”,然后继续运行@Test的剩余部分。

我正在使用的代码段:

@Test
public void checkIfTodaysDateDisplayed(){

    WebElement currentDate = driver.findElement(By.cssSelector(".currentDate"));
    assertEquals("The current date is not displayed", currentDate.isDisplayed());

}

目前,在那些不包含日期的页面上,抛出NoSuchElementException,Jenkins测试结果只显示:“无法找到element:{”method“:”css selector“,”selector“:”。currentDate “}”

我想要达到的目标是: a)打印有意义的消息 b)不要停止测试,因为每个页面需要运行5或6个@Test测试。

修复断言并处理此问题的最佳/最佳解决方案是什么?一个Try / Catch块?

编辑:更新的代码:

WebElement currentDate = null;
    try {
        currentDate = driver.findElement(By.cssSelector(".currentDate"));
    } catch (NoSuchElementException e) {
        Assert.fail("The current date is not displayed! " + e.getMessage());
    }
    Assert.assertNotNull(currentDate);
    Assert.assertEquals("The current date is displayed", currentDate.isDisplayed());

如果页面有日期,则控制台会打印:

java.lang.AssertionError: 
Expected :The current date is displayed
Actual   :true

如果页面没有日期,控制台将打印:

org.openqa.selenium.NoSuchElementException: Unable to locate element: 
{"method":"css  selector","selector":".currentDate"}

2 个答案:

答案 0 :(得分:1)

致A)

是的,一种解决方案是将第一行包装到try-catch块中。一定要抓住您期望的异常而不是其他,因为您的测试将包含漏洞。

您的代码可能如下所示:

@Test
public void checkIfTodaysDateDisplayed(){

    WebElement currentDate = null;
    try {
        currentDate = driver.findElement(By.cssSelector(".currentDate"));
    }
    catch (NoSuchElementException e) {
        Assert.fail("Web page is not properly set up! " + e.getMessage());
    }
    Assert.assertNotNull(currentDate);
    Assert.assertEquals("The current date is not displayed", currentDate.isDisplayed());
}

您可能希望向断言添加其他信息,例如异常堆栈跟踪或您需要调试的任何内容。

致B)

为您想要测试的每个案例编写单数测试。如果将所有内容放在一个单片测试中,那么追逐测试失败的确切位置将更加困难。编写的测试依赖于彼此。

答案 1 :(得分:0)

看起来currentDate.IsDisplayed()上的Assert正在将bool(true)与String进行比较