在我正在进行的测试中,我使用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()
而不是返回完成的回调(事件)?
答案 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);