如何使用 Intern 在 execute 或 executeAsync 中截取屏幕截图
How to take screenshots inside execute or executeAsync using Intern
在我正在进行的这个测试中,我使用 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();
})
此代码有效,但问题是它只截取一个屏幕截图,因为它只捕获第一个事件,然后完成测试而不是等待其他事件。谁能告诉我是否可以在 .executeAsync()
中调用 .takeScreenshot()
而不是返回回调完成(事件)?
无法从 executeAsync
中调用 takeScreenshot
方法,因此您需要执行其他操作。没有 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);
在我正在进行的这个测试中,我使用 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();
})
此代码有效,但问题是它只截取一个屏幕截图,因为它只捕获第一个事件,然后完成测试而不是等待其他事件。谁能告诉我是否可以在 .executeAsync()
中调用 .takeScreenshot()
而不是返回回调完成(事件)?
无法从 executeAsync
中调用 takeScreenshot
方法,因此您需要执行其他操作。没有 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);