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

我有一些不同的产品页面,应该随机select其中之一。 我已经做了JavaScript的testing,但尝试使用node.js和selenium写它时有问题。

在我的testing页上,我得到了下一个结构

<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'); 

然后我使用随机select一些链接,像这样(例如在这里select一个链接随机 )

  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')); 

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

PS我已经复制了“独特的select器”从Firefox开发者控制台,但不知道如何以正确的方式使用它(我已经尝试使用XPath没有成功)

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

更新我也试过这样的build设,并得到正确的链接数量,但无法访问它们

 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示例

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

我在这里find答案Node.js + Selenium如何正确parsingHTML

你可以编辑的HTML和给每个链接自己的唯一ID? 我会这样做,然后创build一个包含所有ID的数组。 select一个随机ID,然后使用driver.findElement(webdriver.By.id(randomID [x]))。click();

如果你没有权限编辑html,你可以用xpath做类似的事情。 将所有唯一的xpathselect器添加到数组,而不是findElement(webdriver.by.id(randomID [x]))使用findelement(webdriver.by.xpath(randomXpath [x]));

对不起,如果我没有得到完全正确的语法…我通常使用selenium与C#。

希望这可以帮助!