残念ながら、nightwatchは約束事や一般的な非同期性をうまくサポートしていません。ブログ投稿hereには、いくつかの苦労ポイントがまとめられています。
幸いにも、browser.elements
とbrowser.perform
の組み合わせを使用することが可能です。
var assert = require('assert');
module.exports = {
'foobar': function (browser) {
var isTextFound = false;
browser
.url('http://localhost:3000')
.waitForElementVisible('body', 1000);
browser.elements('css selector', '.myclass', function (res) {
res.value.forEach(function (jsonWebElement) {
var jsonWebElementId = jsonWebElement.ELEMENT;
browser.elementIdText(jsonWebElementId, function (jsonElement) {
var text = jsonElement.value;
if (text.indexOf('text1') !== -1 && text.indexOf('second_text') !== -1) {
isTextFound = true;
}
});
});
});
browser.perform(function() {
assert.ok(isTextFound, 'Text found');
});
browser.end();
}
}
さんはナイトウォッチのみDOM要素を操作をアサートし、したがって、あなたはブール値を主張することはできませんので、これが必要なキーポイント
require('assert')
のいくつか見ていきましょう。これは、アサーションがレポートに表示されないことを意味しますが、falseの場合はエラーが発生し、これが発生します。
browser.perform(function(){...})
アサーションがその後どうなるように、これは、コマンドキューにアサーションを置きます。これがなければ、すぐに評価が行われ、アサーションは失敗します。
browser.elements('css selector, '.myclass', function(res){...})
これはelements apiを使用しています。 WebdriverプロトコルセクションのapiはWeb要素を直接返すのではなく、Web要素(WebElement JSONオブジェクト)のSerenium表現を返しますので、elementIdText
などの特別なメソッドを使用して情報を取得する必要があります。