【发布时间】:2020-02-12 13:36:25
【问题描述】:
所以我一直试图弄清楚如何根据 find All 元素的数量单击按钮 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('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();
});
【问题讨论】:
-
您有 3 个名为
it的函数,这可能会导致范围问题。在每个it函数中添加一个打印语句,以查看正在调用的内容。我建议选择新名称。 -
另外,您正在定义
it函数,但它们在哪里被调用? -
我认为它实际上是一个 Mocha/Chai 函数。也许我应该提到它,但我会在每个上打印 console.log 并查看它的响应@Jortega
-
@Jortega samwize.com/2014/02/08/…
-
@Jortega 我刚刚更新了代码。我通过每个 console.log 添加了 cmets。似乎
it函数永远不会在循环内开始。
标签: javascript selenium protractor mocha.js chai