承诺在我解决它并更改页面时继续工作(量角器测试)
promise keep working when i resolve it and change page (protractor test)
我有 table 行,我想单击带有特定标签(测试服务器标签)的一行中的编辑按钮,
这是我的代码:
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
仍在工作并在不在新页面中的行上循环!
我得到这个错误:
Failed: stale element reference: element is not attached to the page
document
ElementFinderArray 过滤函数
这可能是 element.all
过滤功能的一个很好的用途。当我们调用 filter 函数时,return 与布尔值相符或承诺布尔值的元素被添加到 ElementFinderArray
。 ElementFinderArray
也是与 element.all
将 return 相同类型的对象。
单击其中一个元素
当文本匹配时,我们在文本匹配时设置一个变量索引。只有在索引为空时才设置索引值。接下来我们将等待过滤器功能完成。然后,我们单击具有 index
值的 clickableSelector
。
等待异步方法
最后要做的是return selectOnRow 的全部承诺。所以你可以调用 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();
});
}
我有 table 行,我想单击带有特定标签(测试服务器标签)的一行中的编辑按钮,
这是我的代码:
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
仍在工作并在不在新页面中的行上循环!
我得到这个错误:
Failed: stale element reference: element is not attached to the page document
ElementFinderArray 过滤函数
这可能是 element.all
过滤功能的一个很好的用途。当我们调用 filter 函数时,return 与布尔值相符或承诺布尔值的元素被添加到 ElementFinderArray
。 ElementFinderArray
也是与 element.all
将 return 相同类型的对象。
单击其中一个元素
当文本匹配时,我们在文本匹配时设置一个变量索引。只有在索引为空时才设置索引值。接下来我们将等待过滤器功能完成。然后,我们单击具有 index
值的 clickableSelector
。
等待异步方法
最后要做的是return selectOnRow 的全部承诺。所以你可以调用 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();
});
}