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