我正在寻找一种方法,如果可能的话,可以有一个可以多次调用并可以被Selenium多次处理的回调。
假设我在Selenium中正确使用了术语,WebDriver.executeAsyncScript()
函数使用回调模式来允许Node.js中的Selenium等待客户端操作,而不是阻塞测试过程。 / p>
因此,您传递了一个函数,该函数要么显式使用回调函数,要么将其注册到客户端代码中,以便将来在某个时候调用(例如使用setTimeout()
,然后触发提供给executeAsyncScript()
function checkInFiveSeconds() {
driver.executeAsyncScript(callback => {
setTimeout(function(){
let val = getSomeValue();
callback(val);
}, 5000)
})
.then(value => {
console.log("After five seconds: '" + value + "'");
});
}
这将在五秒钟后执行console.log("After five seconds
...。
我想稍作修改,使用间隔而不是超时...类似
function checkEveryFiveSeconds() {
driver.executeAsyncScript(callback => {
setInterval(function(){
let val = getSomeValue();
callback(val);
}, 5000)
})
.then(value => {
console.log("Every five seconds: '" + value + "'");
});
}
每五秒钟执行一次console.log("Every five seconds
...等操作,并返回getSomeValue()
返回的最新值,这比下面的替代方法更优雅,但我只得到第一个回调。假定在客户端上下文中接收到回调的任何对象都将其与Selenium中的WebDriver实例断开连接并且无法再次调用,这可能是非常安全的。
我在想获得我想要的唯一方法是手动设置一系列“调用executeAsyncScript(),用超时注册回调,调用超时,处理回调,再次调用executeAsyncScript(),再次注册回调,等等。 ...”
是我想做的还是非常类似的事情?