从量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);