首页 > 解决方案 > assertTrue() 没有抛出 AssertionError

问题描述

我正在使用 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()return 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']

标签: javaseleniumselenium-webdrivertestngassertion

解决方案


你是对的,如果条件为假,你应该期望测试通过抛出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"))));

推荐阅读