web-dev-qa-db-ja.com

nightwatch.jsを使用してwebelementsのリストのテキスト値をアサートします

私はnightwatch.jsを使うのは初めてです。要素のリストを取得し、指定された文字列を持つすべての要素のテキスト値を確認したいと思います。私が試してみました :

function iter(elems) {
      elems.value.forEach(function(element) {
        client.elementIdValue(element.ELEMENT)
      })
    };
    client.elements('css selector', 'button.my-button.to-iterate', iter);

別のstackoverflowの質問についてしかし、私が今使っているのは

waitForElementPresent('elementcss', 5000).assert.containsText('elementcss','Hello')

そしてそれは私に出力を返しています

Warn: WaitForElement found 5 elements for selector "elementcss". Only the first one will be checked.

したがって、リストのすべての要素のテキスト値を検証する必要があります。

10
vibhor

Nightwatch jsの単純なコマンドではすべてを実行できるわけではないため、Seleniumプロトコルを意味するカスタムコマンドが提供されています。ここでは、すべての Seleniumプロトコル を持つことができます。次のコードを使用して、指定された文字列「text」を持つすべての要素のテキスト値をアサートしました。それがあなたを助けることを願っています

    module.exports = {
  '1. test if multiple elements have the same text' : function (browser) {
    function iter(elems) {
       elems.value.forEach(function(element) {
        browser.elementIdText(element.ELEMENT, function(result){
          browser.assert.equal(result.value,'text')
        })
       })
     };

    browser
      .url('file:///home/user/test.html')
      .elements('tag name', 'a', iter);

    }

  };

私のHTMLスニペット

<div id="test">
<a href="google.com" class='red'> text </a>
<a href="#" class='red'> text </a>
<a href="#" class='red'> text 1</a>
</div>
7
Juhi Saxena

私はそれを次のように行うことができました:

.elements('css selector', 'cssValue', function (elements) {
        for(var i=0;i<elements.value.length;i++){
        var elementCss = 'div.search-results-item:nth-child(' + (i+1) + ') span';
            client.assert.containsText(elementCss,'textValue');
        }
        })
2
vibhor

関数iterをforループに入れ、その前に使用する

client.elements('css selector', '#CollectionClass', function (result) {
  if(result.value.length > 1) {   
     var count;
     for(count=1; count<result.value.length; count++) {
       result.value.forEach(function(element) {
       client.elementIdValue(element.ELEMENT);
       client.elementIdText(selectedHighlight.ELEMENT, function(resuddlt) {
         this.assert.equal(typeof resuddlt, "object");
         this.assert.equal(resuddlt.status, 0);
         this.assert.equal(resuddlt.value, "your value");
      });
     }     
   }
  }
};
1
Ashish Jain

あなたはあなたが試したことを述べましたが(これは良いことです)、問題を示すサニタイズされたHTMLを私たちに提示していません(これは可能な答えの精度を低下させます)。

HTMLには情報を含める方法がたくさんあり、組み込みのNightwatch containsTextは、下位構造を含む構造内で見つかったテキストをシリアル化します。

たとえば、Juhiが提案したように、

<div id="test">
<a href="google.com" class='red'> text </a>
<a href="#" class='red'> text </a>
<a href="#" class='red'> text 1</a>
</div>

次に、アサーション

.verify.containsText('#test', ' text ') // first one
.verify.containsText('#test', ' text ') // second one
.verify.containsText('#test', ' text 1') // third one

それぞれがループを作成する必要なしに特定の情報を検証するため、合格します。 Nightwatchはtest要素を調べ、要素を文字列text text text 1にシリアル化します。

他の理由でループが必要な場合、これはすべて学術的ですが、元の質問はテキスト情報を取得する方法に向けられているようで、必ずしも問題の1つの可能な解決策を実行する方法(ループの作成)ではありません。

0
E.C.Mumford