我刚开始使用Protractor编写测试。我想知道isPresent()
和isDisplayed()
方法之间有什么区别。
API定义
那么......在什么情况下它们不同?
答案 0 :(得分:46)
isPresent 如果元素存在于页面中(在DOM中),则为true,但可以隐藏(在css中显示:none) 仅当 isPresent 为true时, isDisplayed 才为真并且元素可见
答案 1 :(得分:9)
isDisplayed
解析元素是否可见,但如果不在DOM中,会抛出异常。
isPresent
解析它是否存在于DOM中,无论它是否实际可见。它没有抛出异常。
如果在DOM中找不到该元素,可以使用以下代码来避免isDisplayed引发的异常:
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
});
然而,这对期望陈述不会很好。
答案 2 :(得分:2)
如果在调用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;
}); };
希望这有助于那里的人!
答案 3 :(得分:2)
IsPresent():如果DOM中存在元素,则返回TRUE,否则返回false
IsDisplayed():
答案 4 :(得分:0)
isDisplayed()和isPresent()之间存在重大差异。
isDisplayed() - 您的元素出现在页面上但会显示。
isPresent() - 您的元素出现在页面的整个DOM中。可能它可以隐藏或不禁用,但存在。
当您需要验证要搜索的特定元素时,不应使用isPresent(),而是可以使用它来根据该元素的存在来验证其他一些检查。