web-dev-qa-db-ja.com

Selenium Webdriver(node.js)スクリーンショットを撮り、テスト結果を保存します

ウェブサイトアプリケーションのテストの開発を始めましたが、いくつか問題があります。

Node.js、webdriver、chromedriver、Selenium rcを使用しています。

質問は次のとおりです。1.スクリーンショットを作成して、スクリプトと同じフォルダーに保存するにはどうすればよいですか。 2.テストケースのテストログを保存する方法はありますか?たとえば、ページの要素を確認しても見つからない場合、どのように出力しますか?

21
paz

テストログを保存するには、通常、テストランナーを使用します。要素がページ上にあり、それが見つからないかどうかを確認すると、例外(通常はアサーションエラー)が発生し、テストランナーがこれを記録して、失敗したテストとしてマークします。 ドキュメントでは、Mochaの使用を推奨しています

スクリーンショットをディスクに保存する場合、 the api は次のようになります

driver.takeScreenshot().then(
    function(image, err) {
        require('fs').writeFile('out.png', image, 'base64', function(err) {
            console.log(err);
        });
    }
);
42
aychedee

参考までに、これは WebdriverJS でスクリーンショットを撮る方法です。

var webdriverjs = require('webdriverjs'),
    client = webdriverjs.remote({
        desiredCapabilities: {
            browserName: 'chrome'
        }
    });

client
    .init()
    .url('http://google.com')
    .saveScreenshot(__dirname + '/googleScreenshot.png')
    .end();

WebdriverCSS を使用してスクリーンショットを撮ることもできます。 CSS回帰テストを行うためのWebdriverJSのプラグインです。 PhantomCSS とほとんど同じです。

6
ChristianB

ファイルの書き込み後に解決し、書き込み失敗時に拒否する完全な約束への aychedee の適応:

const util = require('util')
const fsp = require('fs').promises

function takeScreenshot(driver, file){
  return driver.takeScreenshot()
    .then(image => fsp.writeFile(file, image, 'base64'))
}

または async 関数で

async function takeScreenshot(driver, file){
  let image = await driver.takeScreenshot()
  await fsp.writeFile(file, image, 'base64')
}
5
Matt