selenium-webdriverChai アサーションライブラリ用の構文を付加します。表現力のある統合テストを作成できます。

expect('.frequency-field').dom.to.contain.text('One time')
expect('.toggle-pane').dom.to.eventually.not.be.visible()

使用できるアサーションの種類

すべてのアサーションは Sizzle に互換性のある CSS セレクタ から始まります

expect('.list')
expect('div > h1')
expect('a[href=http://google.com]')

次に、dom フラグを追加します

expect(selector).dom

最後に、アサーションをチェーンに追加できます

テキスト

提供された文字列に対して DOM のテキスト値をテストします。完全一致のみ。

expect(selector).dom.to.have.text('string')

テキスト (contain)

提供された文字列に対して DOM のテキスト値をテストします。部分一致が許可されています。

expect(selector).dom.to.contain.text('string')

マッチ

正規表現に対して DOM のテキスト値をテストします。

expect(selector).dom.to.match(/regex/)

テキスト (正規表現)

正規表現に対して DOM のテキスト値をテストします。(上記 match と同じ)

expect(selector).dom.to.have.text(/regex/)

表示

要素が表示されているかどうかをチェックします。(スクロールなどで画面外に表示されていることはありえます)

expect(selector).dom.to.be.displayed()

可視

要素が画面に表示されているかどうかをチェックします

expect(selector).dom.to.be.visible()

無効

フォーム要素が無効になっているかどうかをチェックします

expect(selector).dom.to.be.disabled()

提供されたセレクタを持つ要素が DOM 内にいくつ存在するかをテストします

expect(selector).dom.to.have.count(number)

スタイル

要素の CSS スタイルをテストします。(文字列を完全に一致)

expect(selector).dom.to.have.style('property', 'value')

フォームフィールドの値が提供された文字列と一致しているかをテストします。

expect(selector).dom.to.have.value('string')

HTML クラス

要素がクラス属性の 1 つとして 警告 を持つことをテストします。

expect(selector).dom.to.have.htmlClass('warning')

属性

要素の属性値をテストします。完全一致のみ。value を省略すると、テストは属性の存在のみをチェックします。

expect(selector).dom.to.have.attribute('attribute', 'value')

not

また、アサーションを否定するために not を常に追加できます。

expect(selector).dom.not.to.have.style('property', 'value')

大きいおよび小さい

アサーションメソッドのいくつかは数値の比較を可能にする larger および smaller プロパティをサポートしています。たとえば、value() の場合。

0 以上の数値が大きい (>=) テストします。

expect('input[type=number]').dom.to.have.larger.value(0)

0 以下の数値が小さい (<=) テストします。

expect('input[type=number]').dom.to.have.smaller.value(0)

0 以下の数値が大きくない (<) テストします。

expect('input[type=number]').dom.not.to.have.larger.value(0)

0 より小さい数値でない (>) テストします。

expect('input[type=number]').dom.not.to.have.smaller.value(0)

larger および smaller をサポートする他のメソッド

長さ 0 以上のテキストであることをテストします。

expect(selector).dom.to.have.larger.text(0)

selector に一致する要素数が 0 以上のテスト。

expect(selector).dom.to.have.larger.count(0)

CSS 属性の値が 0 以上のテスト。(単位を無視)

expect(selector).dom.to.have.larger.style('width', 0)

属性の値が 0 以上のテスト。

expect(selector).dom.to.have.larger.attribute('offsetWidth', 0)

Eventually

また eventually を追加して、chai-webdriver-promised に設定されたタイムアウトまで目的の状態が来るまでポーリングするように指示できます。(下記のセットアップを参照)

expect(selector).dom.to.eventually.have.htmlClass('warning')

すべてがプロミスを返します

これらのアサーションはすべて Q プロミスを返すので、mocha を使用している場合はプロミスを返せば十分です。

セットアップ

セットアップは非常に簡単です。次のようにします。


// Start with a webdriver instance:
var sw = require('selenium-webdriver');
var driver = new sw.Builder()
  .withCapabilities(sw.Capabilities.chrome())
  .build()

//optional timeout in ms to use with eventually (defaults to 1000)
var timeout = 15000;
//optional interval in ms to use when polling (defaults to 200)
var interval = 100;

// And then...
var chai = require('chai');
var chaiWebdriver = require('chai-webdriver-promised');
chai.use(chaiWebdriver(driver, timeout, interval));

// And you're good to go!
chai.describe('kitty test', function() {
  chai.before(function(done) {
    driver.get('http://github.com').then(done);
  });
  it('should not find a kitty', function() {
    return chai.expect('#site-container h1.heading').dom.to.not.contain.text("I'm a kitty!");
  });
});

貢献

それほど簡単ではありません。

$EDITOR index.js      # edit index.js
npm test              # run the specs

ライセンス

MIT です。