点击通过node.js和webdriver的随机链接 [英] Click on random link via node.js and webdriver

查看:92
本文介绍了点击通过node.js和webdriver的随机链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些不同产品的页面,应该随机选择其中一个。
我已经对javascript进行了测试,但在尝试使用node.js和selenium编写时遇到了问题。

I have some page with different products and should select randomly one of them. I have made test on javascript but have problems when trying to write it using node.js and selenium.

在我的测试页面上我得到了下一个结构

On my test page I got next structure

<div class="products">
    <table width="600" cellspacing="6">
        <tbody>
            <tr>
                <td>
                    <a href="phones-59.php"></a>
                </td>
                <td>...
                </td>
            </tr>
            <tr>...</tr>
...

所以下一个例子正在研究javascript,我得到了我需要的所有链接

So next example is working on javascript and I got all links I need

   links = document.getElementById('products').getElementsByTagName('a');

然后我使用随机选择一些链接,就像这样(这里的示例随机选择一个链接

then I use random and select some link, something like this (got example here Choosing a link at random)

   randomlink = Math.round(Math.random() * (links.length+1));
   links[randomlink].click();

没什么特别的,但是当我在node.js中尝试过这样的技巧时,我无法访问链接。尝试使用click()和其他函数时出错。

Nothing special, but when I have tried such trick in node.js I can't access to links. I got errors when trying to use click() and other functions

driver.findElement(webdriver.By.id('products')).findElements(webdriver.By.tagName('a'));

那么我如何点击我的产品块中的随机链接?
谢谢

So how I can click on random link in my "products" block? Thanks

PS我从firefox开发者控制台复制了unique selector,但不知道如何以正确的方式使用它(我尝试过使用xpath没有成功)

PS I have copied "unique selector' from firefox developers console, but have no idea how to use it in right way (I have tried use xpath without success)

"products > table:nth-child(1) > tbody:nth-child(1)"

更新
我也尝试过这样的构造并获得正确数量的链接,但无法访问它们

update I have also tried such construction and got correct number of links, but can't access to them

ll = driver.findElement(webdriver.By.id('products'));
lk = ll.findElements(webdriver.By.tagName('a')).then(function(txt) {
    logger.info("lk length: " + txt.length); });


推荐答案

这很奇怪:)但它有效

Bing.Com的例子

Example for Bing.Com

var webdriver = require('selenium-webdriver');
var logger = require('winston');

driver.get('http://bing.com');
driver.findElements(webdriver.By.tagName('a')).then(function(elems){
    logger.info("links count: " + elems.length);
    rnd = Math.round(Math.random() * (elems.length+1));
    logger.info("rnd number: " + rnd);

    elems[rnd].getText().then(function(textValue){
        logger.info("link name: " + textValue);
    });

    elems[rnd].then(function (elem) {
        elem.click();
    });
});

我在这里找到答案 Node.js + Selenium如何正确解析html

这篇关于点击通过node.js和webdriver的随机链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆