量角器单击元素数组

2022-01-11 00:00:00 angularjs protractor jasmine javascript

我对 e2e 测试和使用量角器/jasmine 框架非常陌生.我知道如何获取元素数组以及如何单击锚点.但是如何/甚至可能点击元素选择器/中继器返回的锚点列表?

I'm quite new to e2e testing and in using protractor / jasmine framework. I know how to get an array of elements and also how to click on an anchor. But how would / is it even possible to click through a list of anchors returned by a element selector / repeater?

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

I've been trying various ways, but as an example (latest one which hasn't been deleted lol) this is what I got:

element.all(by.repeater('link in links')).then(function(links) {
    links.forEach(function(link) {

        link.click().then(function() {
            console.log('callback for click ');

        });
    });
});

这似乎采用了第一个元素并点击通过,但是下一次迭代它挂起(我明白为什么,但努力想办法解决 - 这是我需要采取的某种承诺和解决因素吗?考虑?)

This appears to take the first element and click through, however come the next iteration it hangs (I can see why, but struggling to figure a way to resolve - is this some kind of promise & resolve factor i need to take into account?)

返回的错误是

失败:过时的元素引用:元素未附加到页面文档

Failed: stale element reference: element is not attached to the page document

任何指导/帮助链接将不胜感激 - 到目前为止,谷歌搜索尚未向我返回任何值得注意的信息...

Any guidance / link to help would be appreciated - googling hasn't returned anything of note to me so far...

提前致谢!

推荐答案

设法找到解决方法,尽管感觉不太对.无论如何,如果有人有更好的建议,请随时发布:)

Managed to figure a workaround, although this doesn't feel quite right. Anyway, if anyone has better suggestion feel free to post :)

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.
    };
});

相关文章