はい、複数のタイプの待機を使用しても問題ありません。暗黙の待機時間の95%を使用しますが、一部の条件で明示的に待機する必要があります。アプリが完全に角度で正しく同期されている(つまり未払いの$ httpコールがない - more info)場合は、アプリケータが角度/アプリの準備ができていることを知る傾向があるので、あまり待つ必要はありません。
暗黙:私はあなたのアプリケーションを知らないと、これは非常によくあなたのケースに当てはまることができませんでしたしかし、私は、トピックに関するいくつかの考えを与えるでしょうをこれらは、一貫性と安定性の両方のために、最善の策です。私はあなたに挑戦し、あなたの待ち時間の問題のほとんどが、暗黙の待ち(適切な使用例、複数の条件にまたがって複合されている)の適切な使用によっておそらく解決できると言うでしょう。しかし、再び、私はあなたのアプリを知らない、私はそれが再訪する価値があると思う。 hereのリストをよく読んでください。頻繁に使うのはpresenceOf()
、visibilityOf()
とその対応語stalenessOf()
とinvisibilityOf()
です。
明示的:私はこれらを避けることを非常に難しくしていますが、場合によっては必要であることがわかりました。数秒間アニメーションが発生するなど、暗黙の待機で追跡するものはありません。
// wait for an attribute to be present i.e. "ng-invalid" to be added to a class
// el = element, attr = attribute to check (i.e. class, id etc), target = attribute value to look for
Util.prototype.waitForAttributePresent = function (el, attr, target, time) {
var timeout = time || 0;
return browser.wait(function() {
return el.getAttribute(attr).then(function (val) {
return ~val.indexOf(target) < 0;
});
}, timeout);
};
ユースケース:
// waits 5 seconds for the elements class to contain "active"
var el = $('div');
Util.waitForAttributePresent(el, 'class', 'active', 5000);
expect(true).toBe(true);
静的:私は、下記のようなより多くの暗黙の待機アプローチを試してみて、これらのシナリオをキャプチャして使用するために私自身のいくつかのメソッドを、作成した静的に何を意味するのかわからない、明示的な待機と同じように聞こえる何らかの条件に基づいてではなく、一定の時間、それを停止しています。