量角器映射函数返回undefined

时间:2015-06-04 15:26:44

标签: javascript selenium testing selenium-webdriver protractor

鉴于应用程序上有多个小部件,每个小部件都有自己的标题和诸如此类的东西,我想映射每个小部件的元素,以便在测试中轻松处理。

例如,页面:

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

我做错了什么?我使用的是Protractor 2.0。

4 个答案:

答案 0 :(得分:2)

这让我很困惑,所以我想我会添加一个帮助别人的答案......

虽然我理解map()会返回一个承诺,因为我在expect中使用它,我认为它会被解析,然后应该像数组一样。不。它返回一个看起来像数组的对象,但是不是一个数组。

答案 1 :(得分:2)

我遇到了这个问题,但这些都没有解决这个问题。对于任何像我在这里谷歌搜索的人都是真正的答案:

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;
   });

答案 2 :(得分:1)

map()会返回一个可以解析为数组对象的承诺。

我认为您打算查看第一个小部件的索引和标题:

' The array for the state vector 
Friend Shared mt(DefineConstants.NN - 1) As ULong
' mti==NN+1 means mt[NN] is not initialized 
Friend Shared mti As Integer = DefineConstants.NN+1

' initializes mt[NN] with a seed 
Public Shared Sub init_genrand64(ByVal seed As ULong)
    mt(0) = seed
    For mti = 1 To DefineConstants.NN - 1
        mt(mti) = (6364136223846793005UL * (mt(mti - 1) Xor (mt(mti - 1) >> 62)) + mti)
    Next mti
End Sub

答案 3 :(得分:0)

量角器的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);
 }