如何在 webdriverjs 中等待 takeScreenshot 截取屏幕截图
How to wait in webdriverjs for takeScreenshot to have the screenshot taken
我使用以下类型的代码截屏:
var promise = driver.takeScreenshot();
promise.then(function (data) {
var base64Data = data.replace(/^data:image\/png;base64,/, '');
fs.writeFileSync('screenshot.png', base64Data, 'base64');
});
由于 takeScreenshot 的异步特性,不幸的是屏幕截图将在任意时间点截取,如果在此期间应用程序抛出异常,则根本不会写入屏幕截图。
使用 webdriverjs 同步截图的正确方法是什么?
我通常在 After
挂钩中截图。下面是 cucumberjs 中 after Hook 的示例代码。如果您使用的是 mocha,它也有钩子。
this.After(function (scenario, callback) {
if(scenario.isFailed()){
driver.takeScreenshot().then(function (buffer) {
scenario.attach(new Buffer(buffer, 'base64').toString('binary'), 'image/png');
});
}
driver.quit().then(function () {
callback();
});
});
以下是 WebDriverJS 文档的一些摘录。所以在截屏之前,你可以向 WebDriver 发送一个等待命令以达到特定条件,然后再截屏。在 hooks 之后的一般测试框架中效果最好
WebDriverJS uses a promise "manager" to coordinate the scheduling and execution of all commands.
The promise manager maintains a queue of scheduled tasks, executing each once the one before it in the queue is finished.
我使用以下类型的代码截屏:
var promise = driver.takeScreenshot();
promise.then(function (data) {
var base64Data = data.replace(/^data:image\/png;base64,/, '');
fs.writeFileSync('screenshot.png', base64Data, 'base64');
});
由于 takeScreenshot 的异步特性,不幸的是屏幕截图将在任意时间点截取,如果在此期间应用程序抛出异常,则根本不会写入屏幕截图。
使用 webdriverjs 同步截图的正确方法是什么?
我通常在 After
挂钩中截图。下面是 cucumberjs 中 after Hook 的示例代码。如果您使用的是 mocha,它也有钩子。
this.After(function (scenario, callback) {
if(scenario.isFailed()){
driver.takeScreenshot().then(function (buffer) {
scenario.attach(new Buffer(buffer, 'base64').toString('binary'), 'image/png');
});
}
driver.quit().then(function () {
callback();
});
});
以下是 WebDriverJS 文档的一些摘录。所以在截屏之前,你可以向 WebDriver 发送一个等待命令以达到特定条件,然后再截屏。在 hooks 之后的一般测试框架中效果最好
WebDriverJS uses a promise "manager" to coordinate the scheduling and execution of all commands.
The promise manager maintains a queue of scheduled tasks, executing each once the one before it in the queue is finished.