我试图查看菜单中的75个元素。菜单有搜索区域和元素。我想要做的是从我的列表中获取每个元素,将元素的文本输入到搜索区域,验证元素是否存在于列表中,然后清除搜索区域并输入第二个元素,依此类推。输入第一个元素后,检查并清除搜索区域,程序停止并给出错误:失败:陈旧元素引用:元素未附加到页面文档。我知道这是承诺的问题,但我已经尝试了所有我能找到的关于量角器(每个,地图,蓝鸟等)的循环承诺的内容。没有什么工作......
enterElementsInSearchArea : function()
{
var menuLinks = this.menuLinks;
/*var searchArea = this.searchArea;*/
function searchElement(text)
{
var menuLinks = element.all(by.css('.first-level > ul > li > a'));
var searchArea = element(by.id('search'));
searchArea.sendKeys(text);
//console.log(search);
expect(menuLinks.count()).toBe(1);
searchArea.clear();
expect(menuLinks.count()).toBe(menuLinks.length);
};
menuLinks.then(function(items)
{
for(var i in items)
{
(function(i)
{
// console.log('here1');
// browser.pause();
items[i].getText().then(function(text)
{
console.log(i);
// browser.pause();
searchElement(text);
// console.log('here3');
// browser.pause();
});
})(i);
}
});
}
答案 0 :(得分:1)
你的立即调用的函数表达式应该像循环一样...... each
。
我怀疑您的问题是在searchElement()
方法中...您可能只需要等待应用程序恢复就绪状态。尝试类似:
var menuLinks = element.all(by.css('.first-level > ul > li > a'));
var searchArea = element(by.id('search'));
function searchElement(text) {
searchArea.sendKeys(text);
expect(menuLinks.count()).toBe(1);
// cleanup...
searchArea.clear();
browser.wait(function() {
// or something that indicates ready state...
return menuLinks.count() > 1;
}, 3000)
}