私はProtractorを使ってテストを書き始めました。 isPresent()
メソッドとisDisplayed()
メソッドの違いは何だろうと思っています。
API定義
だから...どのような場合に違いますか?
isPresentは、要素がページ(DOM内)に存在する場合はtrueですが、非表示にすることができます(表示:cssではnone)isDisplayedisPresentがtrueand要素が表示されている場合のみtrue
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
});
ただし、これはexpect文ではうまく機能しません。
要素がページ上にないために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():DOMに要素が存在する場合はTRUEを返し、そうでない場合はfalseを返します
表示されています():
IsDisplayed()とisPresent()には大きな違いがあります。
isDisplayed()-要素はページに存在しますが、表示されます。
isPresent()-要素はページのDOM全体に存在します。おそらく、非表示にするか無効にしないで、存在させることができます。
検索する特定の要素を検証する必要がある場合は、isPresent()を使用しないでください。その要素の存在に基づいて他のチェックを検証するために使用できます。