selenium-webdriver に Chai アサーションライブラリ用の構文を付加します。表現力のある統合テストを作成できます。
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 です。