assertTrue()不会引发AssertionError

时间:2018-11-15 13:27:42

标签: java selenium selenium-webdriver testng assertion

我正在使用assertTrue()检查按钮的存在。

Assert.assertTrue(isElementPresent(By.cssSelector(or.getProperty("addCustomerButton"))));

addCustomerButton包含按钮的定位符。 isElementPresent()代码为:

public boolean isElementPresent(By by) {

    try {
        driver.findElement(by);
        return true;
    } catch(NoSuchElementException e) {
        return false;
    }

}

findElement()方法的try块中的isElementPresent()没有找到元素时,findElement()必须抛出异常NoSuchElementException。我在catch块中捕获到异常。如果isElementPresent()返回true,则声明为true,并且不会抛出AssertionError。如果isElementPresent()返回false,则断言为false,应该抛出AssertionError,对吧?

但是在我上面的脚本中,AssertionError没有被抛出。测试被标记为“通过”。

更新: 经过反复修改和执行后,将抛出AssertionError

Test — failed
com.datadriven.testcases.BankManagerLoginTest loginAsBankManager 1542342446849 10126 

Test
com.datadriven.testcases.BankManagerLoginTest#loginAsBankManager

Exception
java.lang.AssertionError: expected [true] but found [false]
at com.datadriven.testcases.BankManagerLoginTest.loginAsBankManager(BankManagerLoginTest.java:17)
... Removed 29 stack frames

我已将定位器从button[ng-click='addCust()']更改为button[ng-click='addCus']

1 个答案:

答案 0 :(得分:2)

您是对的,如果条件为假,则应该通过抛出AssertionError来期望测试失败。

但是,如果引发任何异常,则测试将失败,因此您所需要做的只是

// throws an NoSuchElementException if it fails
driver.findElement(By.cssSelector(or.getProperty("addCustomerButton")));

在这种情况下,您希望缺少的条目导致错误或异常。这样一来,您应该会得到一条更有意义的信息,即测试失败的原因。

如果您想使用一种方法使所测试的内容更加清晰,可以编写

public static void assertNoException(Object o) { }

assertNoException(driver.findElement(By.cssSelector(or.getProperty("addCustomerButton"))));