量角器-查找所有元素并找到找到的元素的循环长度,然后单击按钮

时间:2020-02-12 13:36:25

标签: javascript selenium protractor mocha chai

所以我一直在尝试找出如何单击按钮x次,具体取决于找到所有元素的数量。这意味着如果有3个元素被相同的类名找到,那么我们将循环3次,应单击3次按钮。

我做了这样的事情:

(新更新,请检查底部的编辑帖子)

通常element.all(by.className('btn btn-remove btn-outlined')).getText()是3,但可以更改为6,并且是随机数,因此我的想法是先读取HTML中有多少btn btn-remove btn-outlined,然后单击找到的元素的次数。因此,如果找到3,则单击按钮3次。

但是现在的问题是它正在查找有多少元素。它也循环了很多次,作为text.length给出,但是在循环中似乎出于某些原因跳过了 it 函数,但我不知道为什么

现在,它确实找到了3个元素的长度,似乎循环了很多次,但是它跳过了执行it功能的工作(这一部分):

      it('Click remove button - ' + i + '/' + text.length, function (done) {

            browser.driver
                .then(() => browser.executeScript("arguments[0].click();", element.all(by.className('btn btn-remove btn-outlined').first().getWebElement())));
                .then(() => done());
        });

        it('Wait for fading button to be gone', function (done) {

            setTimeout(function () {
                done();
            }, 1000);

        });

我很害怕我做错了一些我不知道的错误。

如何找到DOM中有多少给定元素并循环多次+单击“删除”按钮?

编辑代码:

it('Click remove button', function (done) {

    element.all(by.className('btn btn-remove btn-outlined')).getText().then(function (text) {
        console.log(text.length) //returns 3
        for (var i = 0; i < 4; i++) {

            console.log(i); //Does print 0 1 2

            it('Click remove button - ' + i + '/' + text.length, function (done) {

                console.log("Remove button"); //Doesnt print

                browser.driver
                    .then(() => browser.executeScript("arguments[0].click();", element.all(by.className('btn btn-remove btn-outlined').first().getWebElement())));
                    .then(() => done());
            });

            it('Wait for fading button to be gone', function (done) {

                console.log("TIme out"); //Doesnt print

                setTimeout(function () {
                    done();
                }, 1000);

            });
        }
    })
    done();
});

1 个答案:

答案 0 :(得分:1)

it在内部循环未执行的原因是it是在运行时动态生成的,并且未被测试框架Jasmine,Mocha尊重。

据我了解,Jasmine需要在执行前先在测试脚本文件中加载并解析静态it,在加载和解析阶段之后生成的动态it将被忽略。因此,您需要删除动态it

尝试下面的代码

it('Click remove button', function (done) {

    let allBtns = element.all(by.className('btn btn-remove btn-outlined'));

    allBtns.count()
    .then(function (cnt) {

        console.log('Find buttons:', cnt)

        for (let i = 0; i < cnt; i++) { // important to use let but var here.
            console.log('Remove button - ' + i + '/' + cnt);
            browser.executeScript("arguments[0].click();", allBtns.get(i).getWebElement())
            browser.sleep(1000) // sleep 1s
        }
    })
    .then(()=>{
        done();
    })

});
相关问题