从量angular器库中的elements.all.each获取最终值

从每个循环中获取date数组后,我有点麻烦,它完成迭代。

这是上下文的代码:

this.Then(/^The details should match with Splunk data$/,function(callback){ var x=[]; page0213.expandDate(); page0213.myDates(function(id){ x.push(id); console.log("Test: "+ x); }); browser.pause(); } ); 

这个函数调用一个名为page0213.myDates的函数,如下所示:

 this.myDates = function(results){ element.all(by.css('td[ng-bind^=dashboardSummary]')).each(function(date){ date.getText().then(function(text) { results(text); }); }); } 

我已经尝试把它作为一个承诺(像这样:“.each(…)。then(callback())”),并在每个之后移动callback(因为有些来源说,每个应该同步行为)。

我也尝试了Promise.promisify(elements.each),然后把它们放入一个像这样的蓝鸟协程:

  this.getDates = Promise.coroutine(function*(){ try{ let dates = []; yield browser.waitForAngular(); let elements = yield Promise.resolve(element.all(by.css('td[ng-bind^=dashboardSummary]'))); return elements }catch(exception){ console.error(exception); return "nothing was done" } }); 

 this.Then(/^The details should match with Splunk data$/,Promise.coroutine(function*(callback){ var x=[]; page0213.expandDate(); x = yield Promise.resolve(page0213.myDates()) console.log(x) browser.pause(); }) ); 

但它只产生了一个承诺的目标,而不是一个解决的价值。

这些方法都没有工作。 我从昨天开始就试图解决这个问题。

有人有任何指导吗?

首先,您不要从myDates函数和内部承诺parsing函数返回。 而且,这听起来像你实际上需要使用.map() ,而不是.each()

但是,我认为你是在过度复杂的问题,只需要调用element.all() ,这往往是被忽视的getText() 。 它会返回一个产生一个string数组的promise:

 var summary = element.all(by.css('td[ng-bind^=dashboardSummary]')); expect(summary.getText()).toEqual([ "summary1", "summary2" ]); 

如果你想看到控制台上的值:

 summary.getText().then(console.log); 
Interesting Posts