我可以多次调用Selenium executeAsyncScript()回调吗?

时间:2018-08-09 16:16:57

标签: javascript node.js asynchronous selenium-webdriver setinterval

我正在寻找一种方法,如果可能的话,可以有一个可以多次调用并可以被Selenium多次处理的回调。

我所知道的

假设我在Selenium中正确使用了术语,WebDriver.executeAsyncScript()函数使用回调模式来允许Node.js中的Selenium等待客户端操作,而不是阻塞测试过程。 / p>

因此,您传递了一个函数,该函数要么显式使用回调函数,要么将其注册到客户端代码中,以便将来在某个时候调用(例如使用setTimeout(),然后触发提供给executeAsyncScript()

返回的thenable
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(),再次注册回调,等等。 ...”

是我想做的还是非常类似的事情?

0 个答案:

没有答案