こんにちは。サーバーサイドエンジニアの@akane_256です。

今日は、Headless Chromeを使ったブラウザテストの自動化(入門)について書きたいと思います。

目次

  • Headless Chromeとは?
  • 興味を持った背景
  • 今回やったこと
  • 実際のソースコード
  • まとめ

Headless Chromeとは?

  • Chrome59(2017/6月頃)から搭載された機能
  • ChromeをGUIなしでコマンドラインから実行できる
  • DOMのノードを取得したり、画面キャプチャを撮ったりできる
  • ツールと組み合わせて自動テストに使ったりする

ブラウザを開いて、特定のページを開き、自分で目視確認しなくても、
あらかじめ作ったプログラムをコマンドから実行をすれば
自動でキャプチャをとったり指定の要素を取得したりすることができます。

興味を持った背景

私は普段 Ringraph という結婚指輪・婚約指輪の口コミサイトの開発をしています。
サイトは毎週のようにリリースがあり、日々改善をしています。

リリースをする際にテストを実施していますが、

  • ページがきちんと表示されていて
  • 出るべき要素が出ていること
  • ユーザーログイン・口コミの投稿がきちんとできること

などなど、確認することはたくさんあり、それを毎回確認するのはとても大変です。
テストの負担を減らし、エンジニアの心の負担を少しでも減らしたいので(笑)、
少しずつ自動化できないかな、と思って調べました。

今回やったこと

今回は入門編ということで、とてもシンプルですが、
Headless Chromeを使って複数ページのtitleのテキストを取得するプログラムを作成しました。

これだけでも、応用すればtitleやdescription、ページの要素の中身の確認等を自動できるので、実際に運用できたら便利です。

実際のソースコード

今回は、Puppeteer(パペティアー)というライブラリを使って開発をしました。
Puppeteer(パペティアー)とは、Googleが開発・公開しているHeadless Chromeを操作するためのNode.jsのライブラリです。
ドキュメントもわかりやすく、使いやすいです。
JSなのでフロントエンジニアさんは使いやすいのではないでしょうか。
しかもChromeを開発しているGoogleの公式ライブラリなので、とても安心感があります。最近も開発が盛んに行われているようです。

https://github.com/GoogleChrome/puppeteer

Puppeteerを利用するには、Node.js v6.4.0以上と、
Node.jsのパッケージ管理をするyarnもしくはnpmが必要です。
ない場合はインストールが必要です。

今回は下記のバージョンで試しました。


node -v node v8.4.0 yarn --version 0.27.5

早速、試してみます。
まずは適当にディレクトリを作成・移動します。
ディレクトリ内でyarnのコマンドを実行します。


mkdir puppeteer_test cd puppeteer_test yarn add puppeteer

yarn addを実行したあとは、package.jsonというパッケージを管理するための管理ファイルが作成されるのと、
node_modulesディレクトリ配下に、puppeteerと依存モジュール群がインストールされます。

次に、プログラムを書くファイルを作成し、中身を記述していきます。


touch main.js vi main.js

中身のイメージ。公式のGitHubにもサンプルコードが載っています。

<br />const puppeteer = require('puppeteer');

// URL you want to access
const urls = [
    'https://example.com',
    'https://www.google.com'
];

const title = [];

(async () => {
    // The method launches a browser instance with given arguments.
    const browser = await puppeteer.launch();
    // return new page object
    const page = await browser.newPage();

    for(i = 0; i < urls.length; i++){
        await page.goto(urls[i], {waitUntil: 'networkidle2'});
        // add title to array
        title.push(await page.title());
    }

    console.log(title);

    browser.close();
})();

ファイルが作成できたら、最後に実行します。
うまくいくと、プログラムで指定したWebサイトのタイトルタグがconsoleに表示されます。


node main.js [ 'Example Domain', 'Google' ]

インストールからファイル作成・実行まで、シンプルで、結構簡単にできました。

まとめ

  • 他に二つくらい試しましたがPuppeteerが一番簡単そうですぐに動きました。(Lighthouseと、あともう一つくらい試しました。)
  • テストケースを書けば実際に運用できそうで、使い方もシンプルです。
  • PuppeteerはAPIのドキュメントもしっかり書いてありブラウザテスト入門者にもわかりやすいです。
  • 今後は、JSが絡んだ操作の動作確認をしたいです。

読んでくださり、ありがとうございました。

Wedding Parkでは一緒に技術のウエディングパークを創っていくエンジニアを募集しています。
興味のある方はぜひ一度気軽にオフィスに遊びにきてください。

ブライダル業界のデジタルシフトを加速させるリードエンジニア候補募集!

Join Us !

ウエディングパークでは、一緒に働く仲間を募集しています!
ご興味ある方は、お気軽にお問合せください(カジュアル面談から可)

採用情報を見る