Проверка наличия элемента без использования expect

#angularjs #selenium-webdriver #protractor

#angularjs #selenium-webdriver #транспортир

Вопрос:

В моем веб-приложении ссылка для выхода отображается только после входа пользователя в систему — ее нет на странице входа.

В моих тестах на Транспортир я хочу убедиться, что пользователь вошел в систему, а это значит, что в моем первом тесте я должен войти в систему. Чтобы проверить, вошел ли пользователь в систему или ему нужно войти в систему, я хочу проверить наличие ссылки выхода.

Я не хочу делать это с помощью expect , поскольку отсутствие ссылки выхода, присутствующей на странице, вполне приемлемо, это просто означает, что я должен войти в систему.

То, что я ищу, — это способ реализовать if сценарий в моем тесте (в beforeEach функции) — псевдокод:

 if (!signOut.isPresent()) {
    login();
}
 

До сих пор я не нашел простого способа сделать это — все проверки на наличие элемента в DOM страницы, похоже, полагаются на expect , который выдает исключение, когда элемент отсутствует на странице.

Есть ли простой способ сделать это?

Ответ №1:

Вы можете просто перехватить исключение.

Или используйте findElements и проверьте, является ли возвращаемый список элементов пустым, что означает, что элемент отсутствует.

(Не уверен насчет второго решения, потому что я не знаю Protractor, но findElements — это то, что вы бы использовали в Java)

Комментарии:

1. Ваша ссылка на findElement API помогла мне найти решение. Я добавил свой собственный ответ с рабочим примером для JavaScript / Protractor.

Ответ №2:

Ответ @alb-i986 вывел меня на правильный путь. Просмотрев findElement API, я нашел две ссылки о том, как выполнить обработку ошибок для этой функции:

Транспортир возвращает обещание из findElement функции, а функция обещания then (которая вызывается после разрешения обещания) принимает два аргумента обратного вызова:

  • Первый вызывается, когда обещание успешно разрешено, т. Е. Элемент был найден на странице.
  • Второй вариант необязателен. Если элемент не был найден, если он не указан, выполняется стандартная обработка ошибок. Это означает, что генерируется исключение No Such Element. При предоставлении обратного вызова вы несете ответственность за обработку ошибки. Объект ошибки предоставляется в качестве параметра для этого обратного вызова.

Используя второй (необязательный) обратный вызов, вы можете решить обработать или проигнорировать ошибку:

 protractor.getInstance().findElement(by.css(".signout-button"))
    .then(function(element) {
        // The element was found on the page - click it.
        element.click();
    }, function(error) {
        // Sign out button is not present - handle the error or ignore it
    });