Javascript 量角器在元素数组中单击
我对e2e测试和使用量角器/jasmine框架非常陌生。我知道如何获取元素数组,以及如何单击锚点。但是,怎么可能通过元素选择器/中继器返回的锚列表进行点击呢 我一直在尝试各种方法,但作为一个例子(最新的一个没有被删除lol),这就是我得到的:Javascript 量角器在元素数组中单击,javascript,angularjs,jasmine,protractor,Javascript,Angularjs,Jasmine,Protractor,我对e2e测试和使用量角器/jasmine框架非常陌生。我知道如何获取元素数组,以及如何单击锚点。但是,怎么可能通过元素选择器/中继器返回的锚列表进行点击呢 我一直在尝试各种方法,但作为一个例子(最新的一个没有被删除lol),这就是我得到的: element.all(by.repeater('link in links')).then(function(links) { links.forEach(function(link) { link.click().then(f
element.all(by.repeater('link in links')).then(function(links) {
links.forEach(function(link) {
link.click().then(function() {
console.log('callback for click ');
});
});
});
这似乎需要第一个元素并点击,但下一个迭代将挂起(我知道原因,但正在努力寻找解决方法-这是我需要考虑的承诺和解决因素吗?)
返回的错误是
失败:过时元素引用:元素未附加到页面文档
任何帮助的指导/链接都将不胜感激-到目前为止,谷歌还没有向我返回任何值得注意的信息
提前谢谢 设法找到了一个解决办法,尽管感觉不太对劲。无论如何,如果有人有更好的建议,请随时发布:) 为了避免“过时”问题,您必须获得一个
href
已解析属性值数组,该数组映射()
+然后()
可以帮助您(如您已经提供的)。您不需要索引
,您可以从第一个开始迭代链接:
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]);
}
});
element.all(by.repeater('link in links')).map(function(link){
返回link.getAttribute('href');
}).然后(功能(链接){
对于(变量i=0;i
解决方案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);
});
}
尝试以下操作:
element.all(by.repeater('linkin links'))。然后(函数(links){for(var i=0;i很抱歉错误的标记,但我认为它不值得作为一个答案,因为它最多只是一个猜测。嘿,不用担心。我也试过类似的方法。不幸的是,这返回了一个错误,表示对象没有方法“get”-->失败:object[object object]、[object object]、[object object]、[object object]没有方法“get”,我假设您尝试了相同的方法,但没有使用链接。get(I)。单击,链接[I]。单击?@TomNijs我尝试替换链接。get(I)。click()使用测试编码>点击()代码>但是,这会返回原始帖子中相同的过时元素引用错误:(@TomNijslinks[i]。单击
返回相同的过时元素问题我找到了更简单的解决方案
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);
});
}