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')
}