所以我目前正在创建一个测试脚本,其中一个场景是根据 aria-label 单击不同的按钮组。
这是一个非常直接的 JS,我在其中执行查询选择器 all 并单击所有需要的按钮,但由于某种原因,只有第一个按钮被单击。
起初我认为这可能是竞争条件,所以我添加了延迟
我的代码:
var share = document.querySelectorAll("[aria-label='SubmitDoc']");
for (let i = 0, len = share.length; i < len; i++) {
setTimeout(function () {
console.log(share[i]);
share[i].click();
},2000 * i);
}
<div aria-label="SubmitDoc" class="btn-submit" role="button" tabindex="0"></div>
<div aria-label="SubmitForm" class="btn-submit" role="button" tabindex="0"></div>
<div aria-label="SubmitClass" class="btn-submit" role="button" tabindex="0"></div>
<div aria-label="SubmitDoc" class="btn-submit" role="button" tabindex="0"></div>
<div aria-label="SubmitForm" class="btn-submit" role="button" tabindex="0"></div>
<div aria-label="SubmitClass" class="btn-submit" role="button" tabindex="0"></div>
<div aria-label="SubmitFinal" class="btn-submit" role="button" tabindex="0"></div>
<div aria-label="SubmitFinal" class="btn-submit" role="button" tabindex="0"></div>
我错过了什么吗?
答案 0 :(得分:-1)
您基本上缺少一个闭包。因为您正在 setTimeout 中运行单击,所以当它触发循环时,循环已经运行并且 i 的值已经是它的最大值。你可以这样解决:
var submitDoc = document.querySelectorAll("[aria-label='SubmitDoc']")
var doClick = function (node, delay) {
setTimeout(function () {
node.click();
}, delay);
}
for (let i = 0, len = share.length; i < len; i++) {
doClick(share[i], 2000 * i);
}