私の Angular アプリでは、ユーザーがページを開くと、最初にキャッシュされたコンテンツを読み込み、サーバーへの非同期呼び出しでフォローアップして、実際のデータをポーリングし、ページを更新します。既に表示されている要素にアクセスしようとしていますが、ページ コンテンツが更新されたため、その特定の要素は実際には何も変更されていませんが、要素のポインタが変更されています。
私はさまざまな解決策を試しましたが、それでも私が望むほど安定させることはできません。browser.wait を使いたくないので、try/catch ブロックのようなものが必要です。
説明から次のように見えます
browser.waitForAngular();
$http 呼び出しを処理する必要がありますが、役に立ちませんでした。
コードサンプルは次のとおりです。
element(by.id('closeEditTagsModal')).click();
helper.waitElementToDisappear(element(by.css('body[class$="modal-open"]')));
element(by.id('myBookingsTab')).click();
helper.waitElementToDisappear(element(by.css('body[class$="loading"]')));
try {
(helper.waitElementToBeShown(element(by.repeater('b in currentbookings').row(0)).element(by.cssContainingText('.tagPill', 'TestTag')))).then(function() {
}, function(err) {
console.log('element was not found');
throw err;
});
}
catch (err) {
helper.waitElementToBeShown(element(by.repeater('b in currentbookings').row(0)).element(by.cssContainingText('.tagPill', 'TestTag')));
}
これは、try/catch を使用しようとした別のサンプルですが、何か間違ったことをしたようです。try ブロックに次のエラーがあります。
StaleElementReferenceError: 要素が DOM に関連付けられていません
私のヘルプ機能のコード:
var waitElementToBeShown = function (elm) {
browser.wait(function () {
return elm.isPresent();
},10000);
browser.wait(function () {
return elm.isDisplayed();
},10000);
};
要素を操作できるようになるまで待機しようとしています。