如何使用Intern

时间:2017-09-22 13:27:17

标签: javascript intern leadfoot

在我正在进行的测试中,我使用executeAsync()来捕获正在测试的页面的某些事件。我不知道将要发生的事件的数量,并且对于每个事件,我想要用.takeScreenshot()截取屏幕截图。目前,我正在使用此代码:

return this.parent
    .setExecuteAsyncTimeout(5000)
    .executeAsync(function(done) {
        window.events = function(event){
            if(event.message == 'takeScreenshot'){
                return done(event);
            } else if(event.message == 'endTest'){
                return done(event);
            }
        };
    }, [])
    .then(function(event){
         return this.parent
             .takeScreenshot()
             .then(function(data) {
                 //previously defined array to save the screenshots
                 bufferArray.push(data);
             })
    .end();
})

此代码正在运行,但问题是它只需要一个屏幕截图,因为它只捕获第一个事件然后完成测试而不是等待其他事件。任何人都可以告诉我是否可以调用.takeScreenshot()内的.executeAsync()而不是返回完成的回调(事件)?

1 个答案:

答案 0 :(得分:0)

无法在takeScreenshot内调用executeAsync方法,因此您需要执行其他操作。没有async / await,递归可能是最简单的解决方案,类似这样(未经测试):

function takeScreenshots() {
    return this.parent
        // Wait for a takeScreenshot or endTest event
        .executeAsync(function (done) {
            window.events = function (event) {
                if (
                    event.message === 'takeScreenshot' ||
                    event.message === 'endTest'
                ) {
                    done(event);
                }
            };
        })
        .then(function (event) {
            // If the event was a takeScreenshot, take it and then
            // call takeScreenshots again to wait for another
            // event.
            if (event.message === 'takeScreenshot') {
                return this.parent
                    .takeScreenshot()
                    .then(function (data) {
                        bufferArray.push(data);
                    })
                    .then(takeScreenshots);
            }
        });
}

return this.parent
    .setExecuteAsyncTimeout(5000)
    .then(takeScreenshots);