簡體   English   中英

量角器映射函數返回undefined

[英]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

我究竟做錯了什么? 我正在使用Protractor 2.0。

這讓我很困惑,所以我想我會添加一個答案來幫助別人......

雖然我理解map()返回一個promise,因為我在expect使用它,我認為它會被解析,然后應該像一個數組。 不。 它返回一個看起來像數組但不是數組的對象。

我遇到了這個問題,但這些都沒有解決這個問題。 對於像我在這里谷歌搜索的任何人都是真正的答案:

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

map()返回一個將解析為對象數組的promise。

我想你的意思是檢查第一個小部件的索引和標題:

var widget = page.widgets[0];

expect(widget.index).toBe(0);
expect(widget.title).toBe('The Title');

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM