我对e2e测试和使用量角器/茉莉花框架都很陌生。我知道如何获取元素数组以及如何单击锚点。但是,如何点击元素选择器/转发器返回的锚点列表甚至是可能的呢?
我一直在尝试各种各样的方式,但作为一个例子(最新的一个尚未删除lol)这就是我得到的:
element.all(by.repeater('link in links')).then(function(links) {
links.forEach(function(link) {
link.click().then(function() {
console.log('callback for click ');
});
});
});
这似乎是第一个元素并点击,但是它会挂起它的下一个迭代(我可以看到原因,但努力想办法解决 - 这是我需要采取的某种承诺和解决因素考虑到了吗?)
返回的错误是
失败:陈旧元素引用:元素未附加到页面文档
任何有关帮助的指导/链接都会受到赞赏 - 到目前为止,谷歌搜索还没有给我留下任何重要信息......
提前致谢!
答案 0 :(得分:1)
管理以找到解决方法,虽然这感觉不太合适。无论如何,如果有人有更好的建议随时发布:)
element.all(by.repeater('link in links')).map(
function(link, index) {
return {
index: index,
href: link.getAttribute('href')
};
})
.then(function(links) {
for (var i = links.length - 1; i >= 0; i--) {
browser.get(links[i].href);
// do some page specific stuff here.
};
});
答案 1 :(得分:0)
避免"陈旧"问题是,您必须获得一系列href
已解析的属性值,map()
+ then()
可以为您提供帮助(正如您已经提供的那样)。你不需要index
,你可以从第一个开始迭代链接:
element.all(by.repeater('link in links')).map(function(link) {
return link.getAttribute('href');
}).then(function(links) {
for (var i = 0; i < links.length; i++) {
browser.get(links[i]);
}
});
答案 2 :(得分:0)
解决方案01
public findSpecificElementAndClick(element: ElementArrayFinder,expected: number){
let clickedIndex: number = -1;
element.filter(function (elementItem, index) {
clickedIndex++;
if(index === (expected-1)){
element.get(clickedIndex).click();
return true;
}
}).then(function (bool) {
}).catch(function (err) {
throw new FrameworkException('Ooops ! Error... '+err.message);
});
}
解决方案02
public findTextAndClick(element: ElementArrayFinder,expected: string) {
let clickedIndex: number = -1;
let status :boolean = false;
element.filter(function (elementItem, index) {
return elementItem.getText().then(function (text) {
if(text === expected) {
clickedIndex = index;
status = true;
return true;
}
});
}).then(function (bool) {
if(!status){
throw new ApplicationException("Ooops ! Couldn't found "+expected+" Record ...");
}else{
element.get(clickedIndex).click();
}
}).catch(function (err) {
throw new FrameworkException('Ooops ! Error... '+err.message);
});
}