2016-08-05 25 views
1

Ich habe ein bisschen Mühe, ein Datum-Array von jeder Schleife zu bekommen, nachdem es die Iteration abgeschlossen hat.Einen endgültigen Wert von elements.all.each in der Winkelmesserbibliothek erhalten 4.0.1

Hier ist der Code für Kontext:

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

Diese Funktion eine Funktion namens page0213.myDates ruft die wie folgt aussieht:

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

ich es als ein Versprechen versucht haben, die Behandlung (wie dies: ".each (...). then (callback())" und durch Verschieben des Callbacks nach jedem (weil einige Quellen sagen, dass sich jedes synchron verhalten soll).

Ich habe auch versucht Promise.promisify (elements.each) und sie dann in eine Drossel Koroutine wie folgt setzen:

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

Aber es ergab nur ein Versprechen Objekt , anstatt einen aufgelösten Wert.

Keine dieser Methoden hat funktioniert. Ich habe versucht, dieses Problem seit gestern zu beheben.

Hat jemand eine Anleitung?

Antwort

2

Zunächst kehren Sie nicht von der myDates Funktion und den inneren Versprechenauflösungsfunktionen zurück. Und es klingt, als ob Sie tatsächlich .map(), nicht .each() verwenden müssen.

Aber ich denke, Sie sind das Problem zu komplizieren und müssen nur call getText() on element.all(), die oft übersehen wird. Es wäre ein Versprechen zurückzukehren resultierende in ein Array von Strings:

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

Wenn Sie die Werte auf der Konsole sehen möchten:

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