assertTrue () не выбрасывает AssertionError - PullRequest
0 голосов
/ 15 ноября 2018

Я проверяю наличие кнопки с помощью 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 голосов
/ 15 ноября 2018

Вы правы, что если условие ложно, вы должны ожидать, что тест не пройден, бросая 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"))));
...