1

nightwatch-cucumberを使用し、PageObjectsを使用してテストを自動化しています。 に基づくnightwatch-cucumber。ですから、私はJavaScriptを初めて使っています。これまでは、Selenium/WebDriverの自動化のための言語としてJavaを使用することをお勧めしました。nightwatch.jsで同じセレクタで複数の要素を処理する

複数の入力フィールドを定義した値で編集したいと考えています。問題は、これらのすべての入力フィールドに同じセレクタがあることです。また、入力フィールドの数は、テストの開始時には分かっていないか、テストごとに異なります。だから、私は解決策が必要です。 JavaScriptで

List<WebElement> listOfElements = webdriver.getElements('input.myclass'); 
for (WebElement el : listOfElements) { 
    el.sendKeys("abc"); 
} 

それは少しトリッキーだと私は対処するのか分からない:「聖なる」Javaの世界では、私はこのような何かを行うことができます。私のPageObjectでは、私は以下を試みました:

module.exports = { 
    elements: {}, 
    commands: [{ 
    test() { 
     this.api.elements('css selector', 'input.myclass',function (result) { 
     for (var i = 0; i < result.value.length; i++) { 
      console.log(result.value[i].ELEMENT); 
      this.api.elementIdValue(result.value[i].ELEMENT, 'abc'); 
     } 
     }); 

     this.api.pause(3000); 
     return this.api; 
    } 
    }] 
}; 

しかし、これは私のためではありませんでした。この場合、テスト実行中にエラーが発生します(TypeError: Cannot read property 'elementIdValue' of undefined)。また、次のテスト手順では、複数の入力フィールドで処理が完了する必要があるため、非同期コールバック関数ですべてを処理する必要はありません。

したがって、コールバック関数の有無にかかわらず、nightwatch-cucumberの複数の要素を処理するためのソリューションを実装するにはどうすればよいですか?その場合、あなたは何を好きですか? @Florent B.

+0

すべてのコマンドが非同期に実行されるため、コールバックを回避する方法はありません。エラーに関しては、 'this.api.elements'に与えられたコールバック内に別の参照を保持する' this'のコンテキストのためです。 –

答えて

0

THXは、私は自分の質問に答えました。次のコードは、今私の作品:コールバック関数内のコードが非同期に実行

module.exports = { 
    elements: {}, 
    commands: [{ 
    test() { 
     this.api.elements('css selector', 'input.myclass',function (result) { 
     for (var i = 0; i < result.value.length; i++) { 
      this.elementIdValue(result.value[i].ELEMENT, 'abc'); 
     } 
     }); 

     return this.api; 
    } 
    }] 
}; 

ので、私はあなたが自動化されたテストで上に行くために(例えばwaitForElementVisible付き)特別な条件を待つ必要があると思います。自動テストで次のステップを続ける前に、成功したコールバック関数を作成する必要があることがあります。

関連する問題