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

所以我一直试图弄清楚如何根据 find All 元素的数量单击按钮 x 次.这意味着如果有 3 个元素由相同的类名找到,那么我们循环 3 次,应该点击按钮 3 次.

So I have been trying to figure out on how to click a button x times depending on how many find All elements are. Meaning if there is 3 elements that is found by the same classname then we loop 3 times which should click the button 3 times.

我做过这样的事情:

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

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

Usually the element.all(by.className('btn btn-remove btn-outlined')).getText() is 3 but can be changed to 6 and random numbers so my idea was to read first how many btn btn-remove btn-outlined are in the HTML and click that many times of found elements. So if 3 found then click the button 3 times.

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

However the problem right now is that it is finding how many elements there are. It is also looping that many times that is given as text.length but inside the loop it seems to skip the it functions for some reasons and I cant figure out why

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

Right now it does find the length of the elements which is 3 and it seems to loop that many times but it skips to do the it functions (This part):

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

        });

我很害怕我可能做错了我不知道的事情.

and I am afarid that I might have done something wrong that I am not aware of.

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

How can I find how many given elements are in the DOM and loop that many times + click the remove button?

编辑代码:

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

推荐答案

你的it里面的for循环没有执行的原因是那些it在运行时动态生成的,没有受到测试框架 Jasmine、Mocha 的尊重.

The reason of your it inside for loop not executed is those it generated dynamically in run time and did not respected by the test framework, Jasmine, Mocha.

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

As I learned, Jasmine need to load and parse the static it in test script files before executing them, dynamic it generated behind the load and parse stage will be ignored. Thus you need remove dynamic 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();
    })

});

相关文章