所以我一直在尝试找出如何单击按钮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();
});
答案 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();
})
});