Я только начал использовать Protractor для написания тестов. Мне интересно, какая разница между методами isPresent()
и isDisplayed()
.
Определения API
Итак... в каких случаях они отличаются?
Я только начал использовать Protractor для написания тестов. Мне интересно, какая разница между методами isPresent()
и isDisplayed()
.
Определения API
Итак... в каких случаях они отличаются?
isPresent является истинным, если элемент существует на странице (в DOM), но может быть скрыт (display: none in css) isDisplayed истинно, только если isPresent является истинным, а элемент виден
'isDisplayed' разрешает, является ли элемент видимым или нет, но генерирует исключение, если оно не находится в DOM. 'isPresent' разрешает, находится ли он в DOM или нет, независимо от того, действительно ли он виден или нет.
Следующий код можно использовать, чтобы избежать исключения, которое является отображенным, если элемент не найден в DOM:
function isVisible(e) {
var deferred = protractor.promise.defer();
if (e) {
e.isDisplayed().then(
// isDisplayed Promise resolved
function(isDisplayed) {
deferred.fulfill(isDisplayed);
},
// Silencing the error thrown by isDisplayed.
function(error) {
deferred.fulfill(false);
}
);
}
else {
deferred.reject(new Error('No element passed'));
}
return deferred.promise;
}
Даже когда объект разрешен и видимость и присутствие могут быть переданы, например:
deferred.fulfill({
visible: isDisplayed,
present: true
});
Однако это будет плохо работать с операторами ожидания.
Если вы вызываете ошибку при вызове isDisplayed()
, потому что элемент отсутствует на странице, то вы получаете NoSuchElementError: No element found using locator
, затем выполните следующее:
Просто оберните .isDisplayed()
в свой собственный метод и обработайте unresolved/rejected promise
, как показано ниже:
function isTrulyDisplayed (elementToCheckVisibilityOf) {
return elementToCheckVisibilityOf.isDisplayed().then(function (isDisplayedd) {
return isDisplayedd;
}).then(null, function (error) {
console.log('A NoSuchElement exception was throw because the element is NOT displayed so we return false');
return false;
}); };
Надеюсь, это поможет кому-то там!
IsPresent(): возвращает TRUE, если элемент существует в DOM else, возвращает false
IsDisplayed():
Существует большая разница между isDisplayed() и isPresent().
isDisplayed() - Ваш элемент присутствует на странице, но отображается.
isPresent() - Ваш элемент присутствует во всей DOM страницы. Вероятно, это может быть скрыто или не отключено, но присутствует.
Вы не должны использовать isPresent(), когда вам нужно проверить на конкретный элемент, который вы ищете, вместо этого вы можете использовать его для проверки некоторых других проверок на основе присутствия этого элемента.