原谅初学者的问题。我有一个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"}
答案 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进行比较