2010-05-12 48 views
2

我想用硒腳本逐個點擊我網頁上的一堆鏈接,每次點擊都會導致頁面刷新。然而,硒不支持像訪問過的css僞類,所以我無法區分已經點擊的那些和我想要點擊的那些。 有沒有辦法解決我的問題?硒腳本

這裏是我的代碼: http://pastebin.com/z0uRTHHp

回答

0

使用硒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'] &lt;= 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> 
+0

你很好.... – user121196 2010-05-26 21:48:41

+0

以下帶有clickAndWait的xpath在selenium中不起作用,任何想法? clickAndWait // a [text()='Test'] [$ {link}] – user121196 2010-05-26 23:07:19

+0

這可能是因爲XPath中的一個微妙處,其中'aa [1]'將選擇所有第一個後代'a'元素他們的父母的子女,而不是整個文件中的第一個「a」元素。它可能對您更好地使用像'// body/descendant :: a [1]'這樣的東西,或者將它錨定到一個id爲id('myLinks')/ descendant :: a [1]'的元素。不是說,對於最後一個示例,您需要使用'xpath ='繼續定位器。 – 2010-05-27 08:32:24

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

希望有所幫助。

+0

謝謝,我在Firefox和Firefox插件的javascript和html測試用例中做這個,請參閱我的問題中的代碼鏈接。我不確定如何將你的概念融入框架(html和javascript測試用例)中,我可以幫助你,也許可以提供一些示例代碼? – user121196 2010-05-12 17:52:23

+0

通過Selenium IDE添加了新的答案 – 2010-05-13 13:17:16

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

並且如果您想區分哪些鏈接已被點擊,則可能是您的鏈接文字顏色會在點擊後淡入或改變。