Protractor clicking through an array of elements

前端 未结 3 1023
陌清茗
陌清茗 2021-01-20 01:13

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 e

相关标签:
3条回答
  • 2021-01-20 01:41

    To avoid the "staleness" problem, you have to get an array of href resolved attribute values, which map()+then() can help you with (as you've already provided). You just don't need index and you can iterate over links starting from the first:

    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]);
        }
    });
    
    0 讨论(0)
  • 2021-01-20 01:53

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

    Solution 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);
            });
        }
    
    0 讨论(0)
  • 2021-01-20 01:54

    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.
        };
    });
    
    0 讨论(0)
提交回复
热议问题