seleniumwebdriver迭代和导航node.js中的多个链接

从Casper.js迁移到Selenium有更多的工具。

尝试遍历多个链接并使用node.js和selenium-webdriver导航它们。

无法find任何文档或示例,无论我尝试运行哪个循环,都会收到错误。

iLinkCount = oLinks.length; console.log( oLinks ); console.log( iLinkCount ); 

上面的代码输出链接计数到控制台,但我无法得到他们的href标签继续我的testing。

 driver.findElements(webdriver.By.css( 'snip' ) ).then(function( oLinks ) { // driver.findElements(webdriver.By.xpath( "//snip" ) ).then(function( oLinks ) { iLinkCount = oLinks.length; console.log( oLinks ); console.log( iLinkCount ); // for( var oLink in oLinks ){ // var sLink = oLink.getAttribute('href'); // console.log( sLink ); // } for( var i = 0; i < iLinkCount; i++ ){ var oLink = oLinks.get( i ); console.log( oLink ); // var sLink = oLinks[ i ].getAttribute('href'); // console.log( sLink ); } }); 

我试图用来遍历链接的每一个循环,我得到一个错误:

TypeError:undefined不是一个函数

我的循环有什么问题?

关于驱动selenium-webdriver与节点的示例/真正的用法文档的任何好的参考?

在search得很远之后,所有看起来是半logging的都是java / python样本。

我会说这个文档是相当不错的。

你的代码的问题是,当你看文档时, findElements返回一个WebElement数组,并且没有get方法,我所学到的一件事是,如果你打算用selenium在JavaScript中玩,你需要了解(和确保不做任何反诺模式),简单地说,大多数情况下,你与司机谈话(调用一些方法),你得到一个承诺,作为回报,有你的价值渴望而不是实际价值本身。

基于CSSselect器来检索href的函数:

 function getAllHrefs(driver, cssValue){ var selector; if(!cssValue) selector = By.tagName('a'); else selector = By.css(cssValue); return driver.findElements(selector).then(function(oLinks){ var allPromises = oLinks.map(function(oLink){ return oLink.getAttribute('href'); }); return Driver.promise.all(allPromises); }); } 

上述function的例子:

 var dummyPage = 'http://google.com' , Driver = require('selenium-webdriver') , By = require('selenium-webdriver').By , chrome = require('selenium-webdriver/chrome') , driver ; driver = getDriverInstance(); driver.get(dummyPage); getAllHrefs(driver).then(function(hrefs){ console.log('got hrefs: ', hrefs.length, hrefs); }); function getAllHrefs(driver, cssValue){ var selector; if(!cssValue) selector = By.tagName('a'); else selector = By.css(cssValue); return driver.findElements(selector).then(function(oLinks){ var allPromises = oLinks.map(function(oLink){ return oLink.getAttribute('href'); }); return Driver.promise.all(allPromises); }); } function getDriverInstance(){ var driverInstance = new Driver.Builder() .usingServer() .withCapabilities({ browserName: 'chrome' }) .setChromeOptions( new chrome.Options() .addArguments('--privileged') .addArguments('--no-sandbox') ) .build(); return driverInstance; }