(私はこのSOの議論を見たことがありますが、それを私のケースに適用する方法がわからなかったので、新しい質問をしています。重複していないことを願っています)
Cucumber.js で分度器を使用して Angular で記述されたフォームをテストしています。
そこで私がやりたいのは、Protractor にフィールドのタイトル (リンク) をクリックするように指示し、そのフィールドが表示されたらテキストを入力し、次のフィールドのタイトルに移動することです。等々。
キュウリでの私のステップは次のとおりです。
When I fill the form with the following data
| field | content |
| First Name | John |
| Last Name | Doe |
| Address | Some test address |
# and so forth
以下は、ステップ定義に対する中途半端な試みです。
this.When(/^I fill the form with the following data$/, function (table, callback) {
data = table.hashes();
# that gives me an array of objects such as this one:
# [ { field: 'First Name', content: 'John' },...]
for (var i = 0; i < data.length; i++){
var el = element(by.cssContainingText('#my-form a', data[i].field));
el.click().then(function(){
var fieldEl = el.element(by.xpath("../.."))
.element(by.css('textarea'));
fieldEl.sendKeys(data[i].content);
});
}
};
callback();
});
しかし、もちろん、これは機能しません。Protractor がフィールド名をクリックして必要なデータをフィールドに入力する前に、コールバック関数が呼び出され、Cucumber が次のステップに移動するためです。
私の質問は、Cucumber.js で Protractor を使用して、Cucumber テーブルで定義されたデータをフォーム フィールドに挿入する手順をどのように記述できるかということです。これは for ループを使用して実現可能ですか?