将Selenium的findElements中的承诺数组转换为对象数组
我正在使用Selenium node.js我正在尝试执行以下操作
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()); }; }
我的印象是, Q.all
会将由driver.findElements
返回的driver.findElements
的数组转换成一个值的数组,这样当我输出ele.getText()
,它将是一个值。 然而,在这种情况下, ele
仍然是一个承诺。
我在这里错过了什么?
请注意,我认识到,对于上述例子,这是不必要的,我可以简单地使用ele.getText().then
,但我的实际程序需要所有的值之前继续。
因为findElements
返回一个单一的承诺,所以findElements
将all
的承诺汇总在一起。 您还需要使用for
循环而不是for-in
循环遍历已parsing的数组:
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); }) }; });
你也可以使用map
直接获取每个元素的文本数组:
var map = webdriver.promise.map; var elements = driver.findElements(By.xpath(my_xpath)); map(elements, e => e.getText()).then(function(texts) { console.log(texts); });