点击通过node.js和webdriver的随机链接

时间:2014-08-14 01:23:27

标签: javascript node.js selenium selenium-webdriver

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

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

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

所以接下来的例子是javascript,我得到了我需要的所有链接

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

然后我使用随机选择一些链接,就像这样(在这里得到例子Choosing a link at random

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

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

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

所以我如何点击我的&#34;产品中的随机链接&#34;块? 感谢

PS我已经复制了#34;独特的选择器&#39;来自firefox开发者控制台,但不知道如何以正确的方式使用它(我尝试过使用xpath但没有成功)

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

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

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

2 个答案:

答案 0 :(得分:2)

这很奇怪:)但它有效

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 How to parse html properly

答案 1 :(得分:0)

你能编辑html并为每个链接分配他们自己的唯一ID吗?我会这样做,然后创建一个包含所有ID的数组。选择一个随机ID,然后使用driver.findElement(webdriver.By.id(randomID [x]))。click();

如果您没有编辑html的权限,则可以使用xpath执行类似操作。将所有唯一的xpath选择器添加到数组中而不是findElement(webdriver.by.id(randomID [x]))使用findelement(webdriver.by.xpath(randomXpath [x]));

很抱歉,如果我没有完全正确的语法...我通常使用selenium和C#。

希望这有帮助!