1
奇妙な問題分度器で私の約束を解決しようとしているとき、私はまだ分かりません。分度器で約束を解決する
deferred.fulfill(rowData);
という行で何かが間違っています。row
というデータが返されないためです。
つまり、下位関数のrowData.count()
は問題ありませんが、返されたときにはrow.count()
が失敗しています。
this.gridFunction = function (summaryData){
var rowData = getGridRowByText(gridRows, name, text);
rowData.then(function (row) {
// ** THROWS ERROR ** TypeError: row.count is not a function
expect(row.count()).toEqual(3);
row.map(function (cell) {
// iterate cell contents, compare with "summaryData"
});
});
}
function getGridRowByText(gridRows, grid, text) {
var deferred = protractor.promise.defer();
var parentId = getParId();
parentId.getAttribute("id").then(function (parentId) {
// i.e. jquery $('.grid-wrapper.fluid-wrapper #rowId_21')
var sel = '.grid-wrapper.fluid-wrapper #' + parentId;
var rowData = element(by.css(sel)).all(by.repeater('column in vm.sourceData.columns'));
// EXPECT SUCCESSFULL !!!
expect(rowData.count()).toEqual(19);
deferred.fulfill(rowData);
});
return deferred.promise;
};
主な質問:私はきちんとrowData
オブジェクトで満たさ約束を返さないのですか?
* UPDATE *
私の最終的な解決策:
それは実際に私の元の分度器の約束での作業の問題ではなく、ロジックの再設計だけでは解決しません。
this.gridFunction = function (targetRowText){
var result = gridRows.all(by.cssContainingText('span', targetRowText)).first();
var parentId = result.all(by.xpath("./ancestor::div[starts-with(@id, 'rowId')]"));
parentId.getAttribute("id").then(function (parentId) {
console.log(' (ROW-ID: ', parentId);
// further iterations here...
}
}
あなたが実際にここでは、 "繰延" オブジェクトを必要としない、 ボブ
私は実際に、さらに処理を持っています行う。私は "rowData"セルの内容と以前に入力したいくつかの "summaryData"オブジェクトを比較しています。これが私が約束をセットアップした理由です。主な質問は、達成が期待どおりに行動しないのはなぜですか? 'rowData'が変更されたようです。 –
@ bob.mazzo gotcha、私は、現在の問題は、 'ElementArrayFinder'が持つように' count() 'メソッドを持たない"遅延 "をしていることだと思います。私はまだあなたが手作業で約束をする必要はないと思うし、それを実現するために、別のサンプルコードを追加して関数から 'rowData'を返すことができることを実証しました(上位レベルの' return'も注意してください)。 )。ありがとう。 – alecxe
はい、私は今日、以前の追加の関数呼び出しを終わらせました。それはちょうどあまりにもclunkyだった。私はあなたの追加の解決策を午前中に見直します。多くのありがとう、アレック。 –