我想使用selenium脚本逐一点击我网页上的一堆链接,每次点击都会导致页面刷新。但是selenium不支持css伪类,如:visit,所以我无法区分已经点击的那些我想要点击下一个的那些。 有办法解决我的问题吗?
这是我的代码: http://pastebin.com/z0uRTHHp
答案 0 :(得分:3)
您可以使用getXPathCount
命令返回页面上的链接数,然后使用XPath循环它们。使用Java和Selenium RC的一个简单示例如下:
int linkCount = selenium.getXpathCount("/descendant::a").intValue();
for (int i = 0; i < linkCount; i++) {
selenium.click("/descendant::a[" + i + "]");
selenium.waitForPageToLoad("60000");
//ADD YOUR CHECKS HERE
selenium.goBack();
selenium.waitForPageToLoad("60000");
}
如果您使用的是Selenium 2或WebDriver,则以下内容应该有效:
List<WebElement> links = driver.findElements(By.xpath("/descendant::a"));
int lSize = links.size();
for (int l = 0; l < lSize; l++) {
links = driver.findElements(By.xpath("/descendant::a"));
WebElement link = links.get(l);
link.click();
//ADD YOUR CHECKS HERE
driver.navigate().back();
}
希望有所帮助。
答案 1 :(得分:0)
使用Selenium IDE解决的新答案:
注意:您需要从https://addons.mozilla.org/en-US/firefox/addon/85794/安装Flow Control插件(或使用http://51elliot.blogspot.com/2008/02/selenium-ide-goto.html中的用户扩展名)
<tr>
<td>storeXpathCount</td>
<td>//body/descendant::a</td>
<td>linkCount</td>
</tr>
<tr>
<td>store</td>
<td>1</td>
<td>link</td>
</tr>
<tr>
<td>label</td>
<td>checkLink</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>checking link ${link} of ${linkCount}</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//body/descendant::a[${link}]</td>
<td></td>
</tr>
<!-- ADD YOUR CHECKS HERE -->
<tr>
<td>goBackAndWait</td>
<td></td>
<td></td>
</tr>
<tr>
<td>while</td>
<td>storedVars['link'] <= storedVars['linkCount']</td>
<td></td>
</tr>
<tr>
<td>storeEval</td>
<td>storedVars['link'] = ${link} + 1;</td>
<td></td>
</tr>
<tr>
<td>gotolabel</td>
<td>checkLink</td>
<td></td>
</tr>
<tr>
<td>endWhile</td>
<td></td>
<td></td>
</tr>
答案 2 :(得分:0)
点击页面上的所有链接:
@Test
public void test () throws InterruptedException {
try {
List<WebElement> no = driver.findElements(By.tagName("a"));
int nooflinks = no.size();
System.out.println(nooflinks);
for (WebElement pagelink : no) {
no.click();
String linktext = pagelink.getText();
driver.navigate.refresh();
Thread.sleep(1000);
System.out.println(linktext);
}
}
catch (Exception e){
System.out.println("error "+e);
}
}
答案 3 :(得分:0)
首先,您需要获取网页中的所有链接:
List<WebElement> links= driver.findElements(By.Tag('a'));
第二件事你需要通过点击特定链接一个一个地迭代,正如你在点击页面后提到的那样刷新,所以在这种情况下你需要等待你的下一个链接完全点击:
for(WebElement link: links)
{
//wait for element to clickable
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(link);
link.click();
}
如果您想区分已点击的链接,那么您的链接文字颜色可能会在点击后淡出或更改。