Node.js → Mocha → WebDriver → Selenium → Chrome でウェブサイト自動テスト

Node.js から Chrome でウェブサイトを開いて、自動テストしてみます。


テスト実行中のウインドウは、「Chrome は自動テスト ソフトウェアによって制御されています。」という表示が入る。

(1)Selenium Standalone Server をダウンロードする

(2)ChromeDriver (Chrome用WebDriver) をダウンロードする
ZIP ファイルから chromedriver を展開する

(3)手元の java のバージョンを確かめる

java -version

macOS Sierra 標準の 1.7.0_79 だと古い。

java -version

JetBrains 製品には 1.8.0_152 が入っているので、これを使える。

(4)Selenium Standalone Server を起動する

java -jar selenium-server-standalone-3.8.1.jar

あとで Chrome 以外のブラウザもテストしたいので Selenium を使う。

(5) webdriverio をインストールする

npm install webdriverio wdio-mocha-framework

(6)最低限の wdio.conf.js を書く

exports.config = {
    specs: ["./test/specs/**/*.js"],
    capabilities: [{browserName: "chrome"}]

(7)./test/specs/google.js テストを書く

const assert = require("assert");

describe("Test", () => {
  it("Test", () => {

    // Google を開く

    // タイトルをチェックする
    assert.equal(browser.getTitle(), "Google");

    // 検索フォームに入力する
    $("form input[name=q]").setValue("");

    // 検索ボタンをタップする(これではうまくいかない)
    // $("form input[type=submit]").click();

    // 検索ボタンをタップする
    browser.execute(() => {
      document.querySelector("form input[type=submit]").click();

    // 検索結果画面が表示されるのを待つ
    browser.waitForExist("h3 a", 5000);

    // 検索結果1位の内容を確認
    assert.equal($("h3 a").getText(), "WebdriverIO - WebDriver bindings for Node.js");
    assert.equal($("h3 a").getAttribute("href"), "");


./node_modules/.bin/wdio wdio.conf.js



1 passing (9.20s)



0 passing (7.80s)
1 failing

1) Test Google:
unknown error: Element <input value="Google 検索" aria-label="Google 検索" name="btnK" 
type="submit" jsaction="sf.chk"> is not clickable at point (524, 411). 
Other element would receive the click: <div class="sbqs_c">...</div>
Error: An unknown server-side error occurred while processing the command.
    at (test/specs/test.js:14:34)
    at Promise.F (node_modules/core-js/library/modules/_export.js:35:28)
    at elementIdClick("0.22294089062951095-2") - click.js:20:22

Google ウェブサイトの検索ボタンをクリックする部分は、
$("form input[type=submit]").click(); でも通りそうだけど、
オートコンプリートの関係か、クリックできないためにエラーになってしまう。 にも書いてある通り、
execute() でブラウザ側 JavaScript を実行して、検索ボタンをクリックすることで回避できる。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.