我想用硒腳本逐個點擊我網頁上的一堆鏈接,每次點擊都會導致頁面刷新。然而,硒不支持像訪問過的css僞類,所以我無法區分已經點擊的那些和我想要點擊的那些。 有沒有辦法解決我的問題?硒腳本
這裏是我的代碼: http://pastebin.com/z0uRTHHp
我想用硒腳本逐個點擊我網頁上的一堆鏈接,每次點擊都會導致頁面刷新。然而,硒不支持像訪問過的css僞類,所以我無法區分已經點擊的那些和我想要點擊的那些。 有沒有辦法解決我的問題?硒腳本
這裏是我的代碼: http://pastebin.com/z0uRTHHp
使用硒IDE解決新的答案:
注:您需要安裝從https://addons.mozilla.org/en-US/firefox/addon/85794/流量控制插件(或使用來自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>
你可以使用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();
}
希望有所幫助。
謝謝,我在Firefox和Firefox插件的javascript和html測試用例中做這個,請參閱我的問題中的代碼鏈接。我不確定如何將你的概念融入框架(html和javascript測試用例)中,我可以幫助你,也許可以提供一些示例代碼? – user121196 2010-05-12 17:52:23
通過Selenium IDE添加了新的答案 – 2010-05-13 13:17:16
點擊在頁面上的所有鏈接:
@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);
}
}
首先,您需要獲取網頁中的所有鏈接:
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();
}
並且如果您想區分哪些鏈接已被點擊,則可能是您的鏈接文字顏色會在點擊後淡入或改變。
你很好.... – user121196 2010-05-26 21:48:41
以下帶有clickAndWait的xpath在selenium中不起作用,任何想法? clickAndWait // a [text()='Test'] [$ {link}] – user121196 2010-05-26 23:07:19
這可能是因爲XPath中的一個微妙處,其中'aa [1]'將選擇所有第一個後代'a'元素他們的父母的子女,而不是整個文件中的第一個「a」元素。它可能對您更好地使用像'// body/descendant :: a [1]'這樣的東西,或者將它錨定到一個id爲id('myLinks')/ descendant :: a [1]'的元素。不是說,對於最後一個示例,您需要使用'xpath ='繼續定位器。 – 2010-05-27 08:32:24