2016-03-24 11 views
2

要素が表示されているかどうかを確認したい場合は、要素が表示されているかどうかを確認したい場合は、テストを続行します。分度器で要素が表示されない場合は続行

問題は、要素が表示されていない場合は、何も動いていないようで...私はすでにisDisplayed()isPresent()invisibilityOf()を試してみた...しかし、要素が表示されていない場合、テストが失敗したということです。 例

これは、myElementが存在する場合にうまく動作します。しかし、そうでない場合、テストはエラーで失敗します:ロケータを使用している要素が見つかりません:By.cssSelector(myCss)。だから何とかそれはisDisplayed()によって返された約束を解決しないので、他のセクションに行くことはありません。 要素が表示されない場合、テストを実行し続けるにはどうすればよいですか?

答えて

2

この問題を解決するための約束を結びつけることができます。この関数は、要素が両方とも存在し、表示されている場合にのみtrueを返します。

var isApproachable = function(element) { 
    return element.isPresent().then(function(present) { 
    return present 
     ? element.isDisplayed() 
     : false; 
    }); 
} 

isApproachable(myElement).then(function(approachable) { 
    if (approachable) ... 
}); 
+0

ありがとうございます!しかし、残念ながら、これは私の問題を解決しません。私が必要とするのは、次のようなものです:if(myElementが表示されます){//何か} else {else else}これはisDisplayed()が要素がある場合は正常に動作しますが、要素が存在しない場合はelse節には移動しません。常に失敗します... –

+0

私の間違いは申し訳ありません。解決済みの約束の中でブール値にアクセスすることはできます:isApproachable(myElement).then(function(近づける){ blabla }); – Segg3r

1

明確にするために、isDisplayedには実際にブラウザでレンダリングされる要素が必要です。 isPresentは、要素がDOM(および/または可視)にリストされていることを意味します。

isDisplayedは、要素が存在しない場合は失敗するため、存在をテストするためには使用できません。 isPresentを使用する必要があります。

あなたはthuslyこれをテストすることができます:あなたは空の関数でエラーをトラップできた

describe('isPresent', function() { 
    it('should not fail if element does not exist', function() { 
     browser.get('http://google.com'); 
     // this will fail if you use isDisplayed 
     $('#doesNotExist').isPresent().then(function(inDom) { 
      if(inDom) { 
       console.log('I EXIST!!!!1!'); 
      } else { 
       console.log('NOT HERE...'); 
      } 
     }); 
    }); 
}); 
0

。しかし、 "Stale element"のように、 "Locator:By.cssSelector(myCss)"要素を使用している要素が見つかりませんでしたが、別のエラーが発生した場合は危険です。

element(myElement).isDisplayed().then(function(result) { 
    if (result) { 
    //do something 
    } 
    else { 
    //do something else 
    } 
}.thenCatch(function(err) {};