Selenium Webdriver (node.js) снимает скриншот и сохраняет результаты тестов
Я начал разрабатывать тесты для веб-приложения, и у меня есть некоторые проблемы.
Я использую Node.js, webdriver, chromedriver и selenium rc.
Вопросы: 1. Как сделать снимок экрана и сохранить его в той же папке, что и скрипт. 2. Есть ли способ сохранить тестовые журналы для тестового примера? Например, если проверить элемент на странице и не найти его, как это сделать?
Ответы
Ответ 1
Для сохранения тестовых журналов обычно используется тестовый бегун. Когда вы проверяете, находится ли элемент на странице, и вы не можете его найти, вы создаете исключение (обычно ошибку утверждения), и тестовый бегун будет записывать это и помечать его как неудачный тест. В документации они предлагают использовать Mocha.
Что касается сохранения скриншота на диск, то api выглядит так:
driver.takeScreenshot().then(
function(image, err) {
require('fs').writeFile('out.png', image, 'base64', function(err) {
console.log(err);
});
}
);
Ответ 2
Для справки: вот как вы делаете снимок экрана с помощью WebdriverJS:
var webdriverjs = require('webdriverjs'),
client = webdriverjs.remote({
desiredCapabilities: {
browserName: 'chrome'
}
});
client
.init()
.url('http://google.com')
.saveScreenshot(__dirname + '/googleScreenshot.png')
.end();
Вы также можете использовать WebdriverCSS, чтобы делать скриншоты. Это плагин для WebdriverJS для проведения регрессионных тестов CSS. Это почти так же, как PhantomCSS.
Ответ 3
Адаптируем айчедевский ответ в полное обещание, которое разрешится после записи файла и отклонит при ошибке записи:
const util = require('util')
const fs = require('fs')
const writeFile = util.promisify(fs.writeFile)
function takeScreenshot(driver, file){
return driver.takeScreenshot()
.then(image => writeFile(file, image, 'base64'))
}
Или в async
функции
async function takeScreenshot(driver, file){
let image = await driver.takeScreenshot()
await writeFile(file, image, 'base64')
}