browser.wait(...)
で特定の要素が存在するかどうかを確認するために、element1.isPresent()
であるかどうかを確認する試行錯誤的なE2Eテストを作成しようとしている場合は、それ以外は別の要素が存在するかどうかを確認したいelement2.isPresent()
。分度器の待機が不必要に失敗する
ちょうどelement1
とelement2
のうちの1つが存在する必要があります。両方が存在しない場合、テストは失敗します。
私のコードは次のようになります。私が期待する何
var element1 = element(by.id('test-elem1'));
var element2 = element(by.id('test-elem2'));
browser.wait(function() {
return element1.isPresent();
}, 5000, "Waiting for element 1").then(function() {
console.log('Found element 1');
// Do something with element 1
}, function() {
// Element 1 not present --> look for element 2
browser.wait(function() {
return element2.isPresent();
}, 5000, "Waiting for element 2");
print('Found element 2');
});
は次のとおりです。
element1
が存在する場合、最初browser.wait
が成功した約束で終了しますので、その.then
が行く必要があります第1の関数に入力し、Found element 1
を印刷します。- ただし、
element1
が存在しない場合、最初のbrowser.wait
は約束が失われて終了するので、.then
は2番目の関数に入り、element2
を探します。次に、element2
が存在する場合は、テストを続行し、Found element 2
を印刷して、渡します。ただし、element2
が存在しない場合は、この秒で失敗し、browser.wait
となり、テストは失敗します。
element1
が存在しない場合、最初のbrowser.wait
は失敗し、テストに失敗します。 element1
が存在する場合、残りのテストは期待どおりに続行されます。
私は、.then()
の2番目のパラメータが定義されている場合、失敗した場合、完全に失敗するのではなく、2番目の関数を呼び出す必要があるという印象を受けました。
私は、他の場所で作業していたコードがほぼ同じであることを確信しています(私はそれを削除して以来、もう参照できません)。なぜこの部分がうまくいかないのか分かりません。
どうしてですか?
:また、あなたは、第二
browser.wait()
コールのthen()
コールバックに二console.log()
の呼び出しを配置する必要があります。最初に実際に文字列を取得したラッパーを使用していたので、最初の引数は 'browser.wait'に文字列として残しました。私は質問を書くときにそれを削除するのを忘れてしまった。 – Jashaszunまた、「element1」か「element2」のどちらを見つけるかによって、私は別のことをする必要があります。私はまだそれのための期待条件を使用すべきですか? – Jashaszun
@Jashaszunまあ、待っても使えますが、さらにisPresent()チェックを発行します。あるいは、あなたは現在のアプローチに固執することができます(それが今働いていると仮定します)。btw、あなたは 'EC.presenceOf'呼び出しで関数を置き換えることができます。ありがとう。 – alecxe