2016-07-01 13 views
2

I Selen bin Converting mit node.js ich folgendeeine Reihe von Versprechungen von Selen ist findElements in ein Array von Objekten

var driver = *webdriver instance*; 
var my_xpath = *an xpath string*; 
var ele; 

Q.all(driver.findElements(webdriver.By.xpath(my_xpath))).then(function(elements) { 
    for (ele in elements) { 
     console.log(ele.getText()); 
    }; 
} 

Ich versuche, hatte den Eindruck, das zu tun, Q.all des Arrays umwandeln würde Versprechen von driver.findElements in ein Array von Werten zurückgegeben, so dass, wenn ich ele.getText() ausgeben würde es ein Wert wäre. Allerdings ist in diesem Fall die ele immer noch ein Versprechen.

Was fehlt mir hier?

Beachten Sie, dass ich für das obige Beispiel das unnötig ist, und ich kann einfach eine ele.getText().then verwenden, aber mein aktuelles Programm benötigt alle Werte, bevor Sie fortfahren.

+0

Ok, Ich verstehe, warum es jetzt passiert, aber ich weiß nicht, wie ich es beheben soll. 'ele.getText()' gibt ein Versprechen zurück, obwohl 'ele' ein' WebElement' ist. Allerdings möchte ich immer noch eine Reihe von allen tatsächlichen Ausgaben im Gegensatz zu nur Versprechen. – rwolst

Antwort

0

Es ist nicht notwendig, die Versprechen mit all zu aggregieren, da findElements ein einziges Versprechen zurückgibt. Sie müssen auch die aufgelöste Array mit einer for Schleife und keinem for-in Schleife zu durchlaufen:

driver.findElements(webdriver.By.xpath(my_xpath)).then(function(elements) { 
    for (var i = 0; i < elements.length; i++) { 
     elements[i].getText().then(function(text) { 
      console.log(text); 
     }) 
    }; 
}); 

Sie auch map nutzen könnten, um direkt ein Array mit dem Text für jedes Element zu erhalten:

var map = webdriver.promise.map; 

var elements = driver.findElements(By.xpath(my_xpath)); 

map(elements, e => e.getText()).then(function(texts) { 
    console.log(texts); 
});