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

2023-06-15前端开发问题
3

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

问题描述

所以我一直试图弄清楚如何根据 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();
    })

});

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

The End

相关推荐

js删除数组中指定元素的5种方法
在JavaScript中,我们有多种方法可以删除数组中的指定元素。以下给出了5种常见的方法并提供了相应的代码示例: 1.使用splice()方法: let array = [0, 1, 2, 3, 4, 5];let index = array.indexOf(2);if (index -1) { array.splice(index, 1);}// array = [0,...
2024-11-22 前端开发问题
182

JavaScript小数运算出现多位的解决办法
在开发JS过程中,会经常遇到两个小数相运算的情况,但是运算结果却与预期不同,调试一下发现计算结果竟然有那么长一串尾巴。如下图所示: 产生原因: JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会...
2024-10-18 前端开发问题
301

JavaScript(js)文件字符串中丢失"\"斜线的解决方法
问题描述: 在javascript中引用js代码,然后导致反斜杠丢失,发现字符串中的所有\信息丢失。比如在js中引用input type=text onkeyup=value=value.replace(/[^\d]/g,) ,结果导致正则表达式中的\丢失。 问题原因: 该字符串含有\,javascript对字符串进行了转...
2024-10-17 前端开发问题
437

layui中table列表 增加属性 edit="date",不生效怎么办?
如果你想在 layui 的 table 列表中增加 edit=date 属性但不生效,可能是以下问题导致的: 1. 缺少日期组件的初始化 如果想在表格中使用日期组件,需要在页面中引入 layui 的日期组件,并初始化: script type="text/javascript" src="/layui/layui.js"/scrip...
2024-06-11 前端开发问题
455

Rails/Javascript:如何将 rails 变量注入(非常)简单的 javascript
Rails/Javascript: How to inject rails variables into (very) simple javascript(Rails/Javascript:如何将 rails 变量注入(非常)简单的 javascript)...
2024-04-20 前端开发问题
5

CoffeeScript 总是以匿名函数返回
CoffeeScript always returns in anonymous function(CoffeeScript 总是以匿名函数返回)...
2024-04-20 前端开发问题
13