WebdriverIOならyieldでテストが書けるぞ!!!!!!!!

先日、JavaScript用E2EテストツールWebdriverIOの新バージョンがリリースされました!

webdriver.io

WebdriverIO

E2Eテスト用WebDriverのラッパーです
僕は↓の記事で知りました

motemen.hatenablog.com

Protractorとかと比べて比較的シンプルだった印象だが今回は……???

新機能

今回のバージョンの目玉機能はこちら

  • テストランナー wdio
  • yieldでテストが書ける

テストランナー wdio

WebDriverIO の略ですね
karmaと同じく、wdiio.conf.jsでブラウザ、フレームワーク等を指定する感じです

wdio.conf.jsにSauce Labs, Browserstackのアクセスキーを書くことでこれらのサービスを簡単に使えるみたいです
あとmochaのオプションも埋め込める(mocha.optsに書いてたやつ)

プラグインとかまだ書けなそうだし、karmaと役割かぶるかも?

yieldでテスト書く

generatorをつかって同期的テストを書けるようになりました
従来はメソッドチェーンで処理をつなげて書いていく必要がありましたが、これで解放される!??!!!!??!

試しにWebdriverIOのトップページにあるテスト動かしてみよう

wdio.conf.js

まず設定ファイル作る。

$ wdio config すると色々質問されるので、適当に答えると wdio.conf.js ができてる

selenium起動

テスト前にselenium起動する必要がある。webdriver-manager使うと便利

github.com

$ $(npm bin)/webdriver-manager update
$ $(npm bin)/webdriver-manager start

ストファイ

次にテストファイル書く

test/yield.js

var assert = require('assert');

describe('top page', function () {

  describe('my feature', function() {
    it('should do something', function *() {
      yield browser
          .url('https://duckduckgo.com/')
          .setValue('#search_form_input_homepage', 'WebdriverIO')
          .click('#search_button_homepage');

      var title = yield browser.getTitle();
      console.log(title); // outputs: "Title is: WebdriverIO (Software) at DuckDuckGo"
    });
  });

});

(2015/07/11 23:40 追記)

中の人に教えてもらったので↑のコード修正しました
wdioで走らせるテスト内では、 browser というグローバル変数が予め定義されているため、自分で client = webdriverio.remote() などとする必要は無いそうです!

(追記ここまで)

実行

yieldで書いたテストは、 wdio コマンドで走らせる必要があります

実行!

$ $(npm bin)/wdio wdio.conf.js

f:id:amagitakayosi:20150708132402p:plain

やったー

seleniumの起動とか全部自動でやりたい

wdio.conf.jsのフック使うとできるよ
↓やってみた↓ github.com

npm testseleniumのインストール、起動、テスト実行までぜんぶ動くはず!

ツールとの比較

  • testiumは謎の技術で同期的にテスト書ける
  • WDもyieldで書けるっぽい

プラグインは書けたい気がするな―