您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源功能測(cè)試工具 > Selenium
Selenium自動(dòng)化測(cè)試用例設(shè)計(jì)注意事項(xiàng)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/1/25 14:02:31 ] 推薦標(biāo)簽:

  這個(gè)HTML錨標(biāo)記定義了一個(gè)ID屬性為“adminHomeForm”按鈕。和大部分HTML標(biāo)簽相比,這是一個(gè)相當(dāng)復(fù)雜的錨標(biāo)記,但它仍然是一個(gè)靜態(tài)標(biāo)簽。每次頁面被瀏覽器加載時(shí),HTML將保持不變。它的ID在所有的頁面實(shí)例里保持不變,也是說,頁面被展示時(shí),這個(gè)UI元素總是有同樣的標(biāo)識(shí)符。所以,點(diǎn)擊此按鈕的測(cè)試腳本(Selenium Server)如下所示:

selenium.click("adminHomeForm");

  然而,你的應(yīng)用程序,可能生成動(dòng)態(tài)的HTML標(biāo)識(shí)符。在不同的網(wǎng)頁實(shí)例中,標(biāo)識(shí)符發(fā)生改變。例如,一個(gè)動(dòng)態(tài)的頁面的HTML元素可能會(huì)是這個(gè)樣子:

<input id="addForm:_ID74:_ID75:0:_ID79:0:checkBox" type="checkbox" name="addForm:_ID74:_ID75:0:_ID79:0:checkBox" value="true" />

  這是一個(gè)復(fù)選框,id和name屬性都是addForm:_ID74:_ID75:0:_ID79:0:checkBox。在這種情況下,使用標(biāo)準(zhǔn)的定位,測(cè)試腳本應(yīng)該是這樣子的:

selenium.click("addForm:_ID74:_ID75:0:_ID79:0:checkBox");

  對(duì)于動(dòng)態(tài)生成的標(biāo)識(shí)符,這種做法行不通。下一次頁面加載時(shí),標(biāo)識(shí)符將是一個(gè)不同的值,執(zhí)行上述腳本會(huì)遇到“element not found”錯(cuò)誤。

  要更正該問題,一個(gè)簡(jiǎn)單的解決辦法是使用XPath定位替代ID定位器。因此,對(duì)于該復(fù)選框,可以簡(jiǎn)單地使用

selenium.click("//input");

  或者,如果它不是在頁面上的第一個(gè)文本輸入域,嘗試一個(gè)更詳細(xì)的XPath語句。

selenium.click("//input[3]");

  或

selenium.click("//div/p[2]/input[3]");

  但是,如果你確實(shí)需要使用ID來定位元素,可以換一種不同的解決方案。您可以先捕捉到網(wǎng)站的這個(gè)ID,然后再使用它,例如:

String[] checkboxids  = selenium.getAllFields(); // Collect all input IDs on page.
             for(String checkboxid:checkboxids) {
                    if(checkboxid.contains("addForm")) {
                selenium.click(expectedText);
            }
             }

  如果頁面上只有一個(gè)復(fù)選框的ID文本為“expectedText”時(shí),這種方法工作。

  ● 定位Ajax元素

  定位、驗(yàn)證AJAX元素的好的方式是使用Selenium 2.0 webdriver的API,它專門解決Selenium 1.0測(cè)試AJAX元素的一些限制。

  在Selenim 2.0中,可以使用waitfor()方法來等待一個(gè)頁面元素變得可用。該參數(shù)是一個(gè)WebDriver用來實(shí)現(xiàn)定位的By對(duì)象。這是WebDriver的章節(jié)中詳細(xì)解釋。

  在Selenium 1.0(Selenium-RC的)中,要做到這一點(diǎn)需要編寫更多的編碼,但它并不難。首先檢查元素,如果它存在,等待預(yù)定義的時(shí)間段,然后再重新檢查。這在循環(huán)內(nèi)執(zhí)行,如果超過一個(gè)預(yù)定的超時(shí),元素不存在則終止循環(huán)。

  讓我們考慮頁面上實(shí)現(xiàn)AJAX效果的一個(gè)鏈接(鏈接= ajaxLink),可以使用循環(huán)處理:

// Loop initialization.
for (int second = 0;; second++) {
 
     // If loop is reached 60 seconds then break the loop.
     if (second &gt;= 60) break;
 
     // Search for element "link=ajaxLink" and if available then break loop.
     try { if (selenium.isElementPresent("link=ajaxLink")) break; } catch (Exception e) {}
 
     // Pause for 1 second.
     Thread.sleep(1000);
 
}

  這當(dāng)然不是的解決辦法。Ajax是一個(gè)共同的話題,在用戶論壇上,查找一下之前的討論,看看別人是如何做的。

上一頁1234下一頁
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd