我对 Selenium 和 Nodejs 还很陌生,所以请不要对我做出太严厉的评价。我想弄清楚,为什么 console.log()
在我的 for
循环中似乎是异步的(?)?!
为什么我的测试 for
循环会立即将所有 console.log() 行打印到控制台,而整个函数仍在运行?我不明白这一点。我认为 Node 需要被 setTimeout()
告知才能执行异步工作?
我的代码片段:
function cycleClicks(j) {
for (let i = 0; i < j; i++) {
tabStrategyTester.click();
driver.sleep(1000);
if (tabStrategyTester.isDisplayed()) {
console.log("angezeigt");
}
else {
console.log("nicht angezeigt");
}
}
}
cycleClicks(10);
即使浏览器在此之前尚未启动,控制台也会向我显示 10x“angezeigt”。因此,当浏览器尚未启动时,isDisplayed()
函数会返回 true
。此外,据我了解,for
循环不是同步工作的。
如果有任何帮助,我将不胜感激!
最佳答案
很确定驱动程序只是一个包装器 - 告诉它 sleep
将意味着驱动程序将在执行其队列中的任何其他内容之前等待,但这与Javascript线程完全分离。如果您希望 console.log
间隔 1 秒出现,则应使用 Promises 和 await
(这是基于 Javascript 的异步性,而不是基于 Selenium 的异步性):
const sleep = ms => new Promise(res => setTimeout(res, ms));
async function cycleClicks(j) {
for (let i = 0; i < j; i++) {
tabStrategyTester.click();
await sleep(1000);
if (tabStrategyTester.isDisplayed()) {
console.log("angezeigt");
}
else {
console.log("nicht angezeigt");
}
}
}
cycleClicks(10);
但如果可能的话,将异步性限制在驱动程序端仍然会更好。
关于javascript - For 循环立即打印所有循环的 console.log() ,而循环的其余部分仍然运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51005647/