web-dev-qa-db-ja.com

isPresentメソッドとisDisplayedメソッドの違いは何ですか

私はProtractorを使ってテストを書き始めました。 isPresent()メソッドとisDisplayed()メソッドの違いは何だろうと思っています。

API定義

  1. isPresent

  2. isDisplayed

だから...どのような場合に違いますか?

32
翁鹏飞

isPresentは、要素がページ(DOM内)に存在する場合はtrueですが、非表示にすることができます(表示:cssではnone)isDisplayedisPresentがtrueand要素が表示されている場合のみtrue

46
sap1ens

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文ではうまく機能しません。

9
abhishek89m

要素がページ上にないために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
pelican

IsPresent():DOMに要素が存在する場合はTRUEを返し、そうでない場合はfalseを返します

表示されています():

  • 要素がDOMに存在し、表示されている場合はTRUEを返します。
  • 要素がDOMに存在し、非表示の場合はFALSEを返します。
  • DOMに要素が存在しない場合は例外をスローします
2
bsk

IsDisplayed()とisPresent()には大きな違いがあります。

isDisplayed()-要素はページに存在しますが、表示されます。

isPresent()-要素はページのDOM全体に存在します。おそらく、非表示にするか無効にしないで、存在させることができます。

検索する特定の要素を検証する必要がある場合は、isPresent()を使用しないでください。その要素の存在に基づいて他のチェックを検証するために使用できます。

0
mashkurm