Как сделать снимки экрана внутри execute или executeAsync с использованием 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();
})
Этот код работает, но проблема в том, что он делает только один снимок экрана, так как он только ловит первое событие и затем завершает тест, а не ждет других событий. Может кто-нибудь сказать мне, если можно позвонить .takeScreenshot()
внутри .executeAsync()
вместо возврата обратного вызова сделано (событие)?
1 ответ
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);