量角器地图函数返回未定义
Protractor map function returning undefined
鉴于一个应用程序上有多个小部件,每个小部件都有自己的标题等等,我想映射每个小部件的元素,以便在测试中轻松处理它们。
例如一个页面:
this.widgets = element.all(by.css('ul.widget-grid')).map(function(widget, index) {
return {
index: index,
title: widget.element(by.css('div.title')).getText()
};
});
然后在我的规范中:
expect(page.widgets[0].index).toBe(0);
expect(page.widgets[0].title).toBe('The Title');
不幸的是,我的期望又回来了 undefined
。
我做错了什么?我正在使用量角器 2.0。
map()
returns 将解析为 objects 的 数组 的承诺。
我想你是想检查第一个小部件的索引和标题:
var widget = page.widgets[0];
expect(widget.index).toBe(0);
expect(widget.title).toBe('The Title');
这让我很困惑,所以我想我会添加一个答案来帮助其他人...
虽然我明白 map()
returns 是一个承诺,但因为我在 expect
中使用它,所以我认为它会被解决,然后应该像数组一样工作。没有。它returns一个对象,看起来像一个数组,但不是一个数组。
我 运行 遇到了这个问题,其中 none 为我解决了这个问题。对于像我一样谷歌搜索的人来说,真正的答案是:
element.all(by.css('ul.widget-grid')).map(function(widget, index) {
return {
index: index,
title: widget.element(by.css('div.title')).getText()
}
}).then(function(map){
this.widgets = map;
});
Protractor 的ElementArrayFinder.prototype.map 给了我一些困难。
对我有用的解决方案是一个很好的旧 for
循环:
var myElements = element.all(by.css('ul li')) - 1;
var n = myElements.length - 1;
for (var i = 0; i < n; i++) {
var elem = myElements.get(i);
var open = elem.element(by.css('.some-class'));
open.click();
var childElem = filter.element(by.css('[some-attribute]'));
expect(childElem.isPresent()).toBe(true);
}
鉴于一个应用程序上有多个小部件,每个小部件都有自己的标题等等,我想映射每个小部件的元素,以便在测试中轻松处理它们。
例如一个页面:
this.widgets = element.all(by.css('ul.widget-grid')).map(function(widget, index) {
return {
index: index,
title: widget.element(by.css('div.title')).getText()
};
});
然后在我的规范中:
expect(page.widgets[0].index).toBe(0);
expect(page.widgets[0].title).toBe('The Title');
不幸的是,我的期望又回来了 undefined
。
我做错了什么?我正在使用量角器 2.0。
map()
returns 将解析为 objects 的 数组 的承诺。
我想你是想检查第一个小部件的索引和标题:
var widget = page.widgets[0];
expect(widget.index).toBe(0);
expect(widget.title).toBe('The Title');
这让我很困惑,所以我想我会添加一个答案来帮助其他人...
虽然我明白 map()
returns 是一个承诺,但因为我在 expect
中使用它,所以我认为它会被解决,然后应该像数组一样工作。没有。它returns一个对象,看起来像一个数组,但不是一个数组。
我 运行 遇到了这个问题,其中 none 为我解决了这个问题。对于像我一样谷歌搜索的人来说,真正的答案是:
element.all(by.css('ul.widget-grid')).map(function(widget, index) {
return {
index: index,
title: widget.element(by.css('div.title')).getText()
}
}).then(function(map){
this.widgets = map;
});
Protractor 的ElementArrayFinder.prototype.map 给了我一些困难。
对我有用的解决方案是一个很好的旧 for
循环:
var myElements = element.all(by.css('ul li')) - 1;
var n = myElements.length - 1;
for (var i = 0; i < n; i++) {
var elem = myElements.get(i);
var open = elem.element(by.css('.some-class'));
open.click();
var childElem = filter.element(by.css('[some-attribute]'));
expect(childElem.isPresent()).toBe(true);
}