Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 量角器在元素数组中单击_Javascript_Angularjs_Jasmine_Protractor - Fatal编程技术网

Javascript 量角器在元素数组中单击

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

我对e2e测试和使用量角器/jasmine框架非常陌生。我知道如何获取元素数组,以及如何单击锚点。但是,怎么可能通过元素选择器/中继器返回的锚列表进行点击呢

我一直在尝试各种方法,但作为一个例子(最新的一个没有被删除lol),这就是我得到的:

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()测试编码>点击()但是,这会返回原始帖子中相同的过时元素引用错误:(@TomNijs
links[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);
        });
    }