2017-03-04 9 views
2

nightwatch.jsでWebアプリケーションをテストする際に問題があります。前に追加したすべての子要素が含まれているかどうかを確認するために、ページのすべてのdiv要素を繰り返し処理する必要があります。例えば、私が持っている:divの1つに夜間の値が含まれていないか確認してください

<div className = 'myclass'> 
    <h2> text1 </h2> 
    <h3> second_text1 </h3> 
</div> 
<div className = 'myclass'> 
    <h2> text2 </h2> 
    <h3> second_text2 </h3> 
</div> 

そして私はdiv要素の一つが両方含まれているかどうかを確認したい:「テキスト2」と「second_text2」を。私はここのようなiter関数を追加しようとしました:Assert text value of list of webelements using nightwatch.jsが、このdivの子要素をチェックする方法がわからず、divのいずれも自分の値を含んでいない場合にのみアサートします。

答えて

2

残念ながら、nightwatchは約束事や一般的な非同期性をうまくサポートしていません。ブログ投稿hereには、いくつかの苦労ポイントがまとめられています。

幸いにも、browser.elementsbrowser.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などの特別なメソッドを使用して情報を取得する必要があります。

関連する問題