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,我认为目前的问题是你正在制作一个“延迟”,它没有'count()'方法作为'ElementArrayFinder'。我仍然认为你不需要手动作出承诺并实现它,我已经添加了另一个示例代码来演示你仍然可以从函数中返回'rowData'(注意上层的'return' )。谢谢。 – alecxe
是的,事实上,我今天早些时候最终抛弃了额外的函数调用。它太笨拙了。我会在早上检查你的附加解决方案。非常感谢,亚历克。 –