量角器-查找所有元素并找到找到的元素的循环长度,然后单击按钮 [英] Protractor - Find all elements and loop length of found elements and click button

查看:59
本文介绍了量角器-查找所有元素并找到找到的元素的循环长度,然后单击按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我一直在尝试找出如何单击按钮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.

我已经做了类似的事情:

I have done something like this:

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

通常 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个元素的长度,似乎循环了很多次,但是它跳过了执行it功能的工作(这一部分):

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 的原因是在运行时动态生成的 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();
    })

});

这篇关于量角器-查找所有元素并找到找到的元素的循环长度,然后单击按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆