[英]promise keep working when i resolve it and change page (protractor test)
我有一個表行,我想點擊具有特定標簽(測試服務器標簽)的行中的編輯按鈕,
這是我的代碼:
public selectOnRow( textSelector:string , clickableSelector : string , value:string) {
let promise = new Promise(resolve => {
element.all(by.css(textSelector)).each((elem, i) => {
elem.getText().then(function (text) {
if (text === value) {
resolve(i);
}
});
});
});
promise.then(i => {
element.all(by.css(clickableSelector)).get(i).click();
})
}
我稱之為:
beforeAll(async () => {
page = new AppPage;
page.navigateTo('/asset/server');
page.selectOnRow('.column-label div', '.edit-action-btn', 'test server label')
baseUrl = page.baseUrl;
});
問題是它點擊了正確的行但是當頁面被更改時仍然selectOnRow
正在工作並循環那些不在新頁面中的行! 我收到此錯誤:
失敗:陳舊元素引用:元素未附加到頁面文檔
這可能是對element.all
的過濾函數的一個很好的用法。 當我們調用filter函數時,返回帶有boolean或承諾為boolean的truthy的元素會被添加到ElementFinderArray
。 ElementFinderArray
也是element.all
將返回的相同類型的對象。
當文本匹配時,我們在文本匹配時設置變量索引。 僅在索引為空時設置索引值。 接下來我們將等待過濾功能完成。 然后,我們單擊帶有index
值的clickableSelector
。
最后要做的是在selectOnRow上返回整個promise。 所以你可以調用await selectOnRow(textSeector, clickableSelector, value);
public selectOnRow(textSelector:string, clickableSelector: string, value: string) {
let index: number;
return element.all(by.css(textSelector)).filter((elem, i) => {
return elem.getText().then(text => {
// test if index is not set
// also, if the text matches, update the index
if (!index && text === value) {
index = i;
}
return text === value;
});
}).then(() => {
// wait for the filter function to complete
// at this point, the index should be set.
return element.all(by.css(clickableSelector)).get(index).click();
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.