繁体   English   中英

Selenium Webdriver迭代并浏览node.js中的多个链接

[英]Selenium webdriver iterate and navigate over multiple links in node.js

从Casper.js迁移到Selenium,以获得更多工具。

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

找不到任何文档或示例,无论我尝试运行哪个循环,我都会不断收到错误消息。

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

上面的代码将链接计数输出到控制台,但是我无法获取其href标记以继续进行测试。

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:未定义不是函数

我的循环怎么了?

关于使用node驱动selenium-webdriver的示例/ REAL USAGE文档有什么好的参考?

经过广泛搜索之后,似乎所有半文件化的内容都是java / python示例。

我会说这份文档非常好。

代码的问题是,当您查看文档时, findElements返回一个WebElement数组,并且该数组没有get方法,我了解到的一件事是,如果要使用javascript中的selenium ,则需要了解简单地说, Promise的概念(并确保不执行任何反承诺模式),简单地说,在大多数情况下,您与驱动程序交谈(调用其中的某些方法),便会得到一个承诺,回报是您拥有欲望而不是实际价值本身。

基于CSS选择器检索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);
    });     
}

以上功能的示例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM