您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源功能測(cè)試工具 > Selenium
利用Selenium自動(dòng)化web測(cè)試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2016/6/15 16:19:26 ] 推薦標(biāo)簽:Selenium 功能測(cè)試 自動(dòng)化測(cè)試

  如果知道 ID 或名稱之外的一個(gè)屬性,那么直接使用 @attribute=value 定位元素。
  如果只知道屬性值的一些特定部分,那么使用 contains(attribute, value) 定位元素。
  如果元素沒(méi)有指定的屬性,那么利用 Firebug 搜索近的具有指定屬性的父元素,然后使用 Xpath 從這個(gè)元素開(kāi)始定位想要找到的那個(gè)元素。
  表 1. 定位元素的 Xpath 表達(dá)式
  定位元素 Xpath 表達(dá)式
  n 行的第一列 //table[@id='test_table']//tr[n]/td
  n 行的圖像 //table[@id='test_table']//tr[n]//img
  ‘Test 1’ 的編輯鏈接 //a[contains(@href,test1)]
  表 1 展示了定位元素的 Xpath 表達(dá)式。在 Firebug 的幫助下,Xpath 可以定位元素和復(fù)制的元素。在元素沒(méi)有 ID 和名稱時(shí),Selenium IDE 將會(huì)采用 Xpath。盡管 Xpath 利用已經(jīng)錄的腳本,有助于保持一致性,但是它高度依賴于 web 頁(yè)面的結(jié)構(gòu)。這使得測(cè)試用例可讀性差,增加了維護(hù)難度。此外,在 Internet Explorer 7 和 Internet Explorer 8 中運(yùn)行具有多個(gè)復(fù)雜 Xpath 表達(dá)式的測(cè)試用例可能會(huì)太慢了。在這種情況下,將 Xpath 更換為 DOM,后者是另一種高效的定位策略。
  DOM 是 Document Object Model(文檔對(duì)象模型)的縮寫(xiě)。Selenium 允許您利用 JavaScript 遍歷 HTML DOM。Java 的靈活性允許在 DOM 表達(dá)式中有多個(gè)語(yǔ)句,用分號(hào)隔開(kāi),以及在語(yǔ)句中定義函數(shù)。
  表 2. 定位元素的 DOM 表達(dá)式
  定位元素 DOM 表達(dá)式
  n 行的第一列 dom=document.getElementById('test_table').rows[n-1].cells[0]
  n 行的圖像 dom=element=document.getElementById('test_table').rows[n-1].cells[1]; element.getElementsByTagName('IMG')[0]
  ‘Test 1’ 的編輯鏈接 
  dom=function test(){
  var array=document.getElementsByTagName('a');
  var element;for(var i=0; i<array.length; i++)
  {if(array[i].attributes.getNamedItem("href").
  value.indexOf('test2')!=-1){element=array[i];break;}}return element}; test()
  表 2 展示了定位元素的 DOM 表達(dá)式。DOM 定位器在 Firefox 和 Internet Explorer 中也有很好的性能。組織 DOM 表達(dá)式需要一些 JavaScript 知識(shí)。有時(shí),DOM 表達(dá)式對(duì)于復(fù)雜的元素來(lái)說(shuō)太長(zhǎng)了,難以看懂(參見(jiàn)表 2 中提到的 Test 1 的編輯鏈接的表達(dá)式)。
  CSS 定位器用于利用 CSS 選擇器選擇元素。當(dāng) HTML 代碼具有良好的樣式時(shí),可以高效地利用 CSS 定位器。樣例表達(dá)式展示在表 3 中。
  表 3. 定位元素的 CSS 表達(dá)式
  定位元素 CSS 表達(dá)式
  n 行的第一列 css=#test_table .test_class:nth-child(n)
  n 行的圖像 
  css=#test_table  tr:nth-child(n) > td:nth-child(2) >
  table td:nth-child(1) > div >  img
  ‘Test 1’ 的編輯鏈接 css=a[href*='test2']
  一般來(lái)說(shuō),選用熟悉的定位器表達(dá)式,并在腳本結(jié)構(gòu)中保持一致。如果有多種表達(dá)式可執(zhí)行,那么使用高效的方式在 web 頁(yè)面中定位元素。
  如何處理彈出窗口
  一般來(lái)說(shuō),操作都是在由 Selenium 啟動(dòng)的主窗口中執(zhí)行。如果您想在一個(gè)由 window.open 函數(shù)生成的新窗口中執(zhí)行操作,那么將焦點(diǎn)更換到新窗口。在彈出窗口中執(zhí)行操作之后,焦點(diǎn)返回到主窗口。處理彈出窗口的過(guò)程定義在清單 12 中。
  清單 12. 處理彈出窗口的樣例代碼
  //wait for the popup window with timeout;
  selenium.waitForPopUp(windowname, timeout);
  //select the pop up window
  selenium.selectWindow(popupWindowIdentifier);
  //perform action on popup window and close the window;
  ....
  //return to the main window use 'null'
  selenium.selectWindow(null);
  windowname 是調(diào)用 window.open 函數(shù)的第二個(gè)參數(shù)。上面提到的 popupwindowIdentifier 是一個(gè)窗口標(biāo)識(shí)符,可以是窗口 ID、窗口名稱、title=the title of the window 或 var=javascript variable。如果彈出窗口的屬性未知,但是真的定義了,那么使用 getAllWindowIds()、getAllWindowNames() 或 getAttributeFromAllWindows() 函數(shù)來(lái)檢索彈出窗口的屬性。
  在新版的 Selenium RC 1.0.1 中,Selenium 添加了像 selectPopUp(String) 和 deselectPopUp() 這樣的方法,它們的功能在以前版本中由 selectWindow(String) 提供。
  清單 13. 處理彈出窗口的彈出函數(shù)
  //wait for the popup window with timeout;
  selenium.waitForPopUp(“”, timeout);
  //same as selenium.selectWindow
  selenium.selectPopUp(“”);
  //perform action on popup window and close the window;
  ....
  //same as selenium.selectWindow(null);
  selenium.deselectPopUp();
  清單 13 展示了處理彈出窗口簡(jiǎn)單的方式。您可以保留 waitForPopUp 和 selectPopUp 函數(shù)中的第一個(gè)參數(shù)為空。如果同時(shí)彈出多個(gè)窗口,請(qǐng)指定窗口屬性。
  如何處理上載/下載文件窗口
  Selenium 使用 JavaScript 來(lái)模擬操作。因此,它不支持諸如上載窗口、下載窗口或身份認(rèn)證窗口之類的瀏覽器元素。對(duì)于非主要窗口,配置瀏覽器跳過(guò)彈出窗口。
  圖 7. 安全信息窗口

  展示 Security Information 彈出窗口的屏幕快照,指出頁(yè)面包含安全的和不安全的條目
  跳過(guò)圖 7 中安全信息窗口的解決方案是打開(kāi) Tools > Internet Options > Custom Level。然后啟用 Display mixed content。
  配置 Internet Explorer 跳過(guò)非主要窗口會(huì)減少或消除運(yùn)行測(cè)試用例時(shí)不必要的處理。但是如果配置了 Firefox,那么將它保存為新的配置文件,并利用定制的配置文件啟動(dòng)服務(wù)器。在關(guān)于測(cè)試 HTTPS 網(wǎng)站的一節(jié)中提到了這樣做的原因。

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