点击通过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#。
希望这可以帮助!