您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源功能測(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è)試

  簡(jiǎn)介
  Selenium 是一個(gè)健壯的工具集合,跨很多平臺(tái)支持針對(duì)基于 web 的應(yīng)用程序的測(cè)試自動(dòng)化的敏捷開發(fā)。它是一個(gè)開源的、輕量級(jí)的自動(dòng)化工具,很容易集成到各種項(xiàng)目中,支持多種編程語(yǔ)言,比如 .NET、Perl、Python、Ruby 和 Java? 編程語(yǔ)言。
  利用 Selenium 測(cè)試 Ajax 應(yīng)用程序
  Asynchronous JavaScript and XML (Ajax) 是一種用于創(chuàng)建交互式 web 應(yīng)用程序的 web 開發(fā)技術(shù)。Ajax 應(yīng)用程序的一個(gè)特征是,不會(huì)導(dǎo)致一次重新加載整個(gè)頁(yè)面。相反,瀏覽器將具有一個(gè)對(duì)服務(wù)器的異步調(diào)用以獲得數(shù)據(jù),并且只刷新當(dāng)前頁(yè)面的特定部分。要提高 web 頁(yè)面的交互性、響應(yīng)速度和可用性,測(cè)試 Ajax 應(yīng)用程序的過(guò)程需要一些改變。
  我們首先刷新 web 頁(yè)面,然后是等待,直到異步調(diào)用完成。完成之后,可以繼續(xù)進(jìn)行驗(yàn)證。此時(shí),出現(xiàn)適當(dāng)?shù)却龝r(shí)間的問(wèn)題。
  一種選擇是在測(cè)試應(yīng)用程序中簡(jiǎn)單地暫停一段固定的時(shí)間,這在大多數(shù)情況下都是可行的。在有些情況下,比如說(shuō)網(wǎng)絡(luò)吞吐量很慢時(shí),Ajax 調(diào)用在暫停一段特定的時(shí)間之后沒有完成,會(huì)導(dǎo)致測(cè)試用例失敗。另一方面,如果暫停時(shí)間太長(zhǎng),會(huì)使得測(cè)試慢得不可接受。
  Selenium 提供了更為高效的處理等待的方式。一種可能做法是,使用類 com.thoughtworks.selenium.Wait 來(lái)等待一個(gè)元素或文本在頁(yè)面上出現(xiàn)或消失。可以在 until() 函數(shù)中定義等待的退出條件,或者擴(kuò)展 Wait 類來(lái)實(shí)現(xiàn)等待退出。清單 1 是使用 Wait 類的樣例代碼。它將在條件滿足時(shí)停止等待,或者在超出大等待時(shí)間時(shí)返回一個(gè)超時(shí)異常。
  清單 1. 等待元素或文本出現(xiàn)
  Wait wait = new Wait() {
  public boolean until() {
  return selenium.isElementPresent(locator);
  // or selenium.isTextPresent(pattern);
  }
  };
  wait.wait("", timeoutInMilliseconds);
  另一種選擇是使用 Selenium 中的 waitForCondition 函數(shù),一個(gè) JavaScript 代碼片段將被作為參數(shù)傳遞給該函數(shù)。一旦 Selenium 檢測(cè)到條件返回為真,它將停止等待。您可以等待一些元素或文本出現(xiàn)或者不出現(xiàn)。JavaScript 可以運(yùn)行在由 Selenium.browser.getCurrentWindow() 函數(shù)彈出的應(yīng)用程序窗口中。清單 2 是檢查窗口狀態(tài)的樣例代碼。它只工作在 Firefox 中。
  清單 2. 等待窗口緒的狀態(tài)
  String script = "var my_window = selenium.browserbot.getCurrentWindow();"
  script += "var bool;";
  script += "var readyState = (my_window.document.readyState);";
  script += "if (readyState == 'complete'){";
  script += "bool = 'true';";
  script += "}";
  script += "bool;";
  selenium.waitForCondition(script, timeoutInMilliseconds);
  如何支持 dojo 應(yīng)用程序
  Dojo 是一個(gè)常用的 JavaScript 工具包,用于構(gòu)造動(dòng)態(tài) web 界面。使用 Selenium 測(cè)試 Dojo 應(yīng)用程序時(shí)的一個(gè)關(guān)鍵點(diǎn)是認(rèn)識(shí) Dojo 小部件和記錄它們的操作。作者定義的 Dojo 小部件處于抽象級(jí)別。頁(yè)面運(yùn)行時(shí),會(huì)將 Dojo 小部件轉(zhuǎn)換成基本的 HTML 代碼。存在很多由 Dojo 自動(dòng)生成的 HTML 代碼,因此,Dojo 小部件的認(rèn)識(shí)可能與傳統(tǒng) HTML 小部件有些不同。
  Dojo 小部件上執(zhí)行的操作(包括文本字段、按鈕復(fù)選框和單選按鈕)可能與 HTML 小部件相同。但是,Dojo 在組合框上提供的日期選擇器和其他額外的小部件可能需要特定的處理。
  圖 1. Dojo 組合框

  展示帶幾個(gè)選項(xiàng)的組合框的屏幕快照
  使用 Selenium IDE 來(lái)記錄圖 1 中提供的組合框上選中的操作。單擊向下箭頭,會(huì)出現(xiàn)一個(gè)下拉列表。選中第三項(xiàng) Stack(SWG)。記錄的腳本提供在圖 2 中。
  圖 2. Selenium IDE 記錄的腳本

  展示 Selenium 所記錄信息(比如鼠標(biāo)單擊)的屏幕快照
  有時(shí),只會(huì)由 IDE 生成第二行腳本。在這種情況下,添加單擊箭頭按鈕的操作。對(duì)于上面的腳本,如果第一行被重新播放,那么它應(yīng)該生成下拉列表。但是它不執(zhí)行任何操作。對(duì)于多個(gè) Dojo 小部件,單擊并不真正執(zhí)行單擊操作。將 click(locator) 更改為 clickAt(locator, coordString) 或者 MouseDown(locator) 和 MouseUp(locator)。
  對(duì)于下拉列表,等待時(shí)間應(yīng)該相加。像圖 2 中展示的腳本一樣,選中項(xiàng)的單擊操作將會(huì)剛好在單擊向下箭頭按鈕之后執(zhí)行。它可能會(huì)因?yàn)橄吕斜頉]有出現(xiàn)而失敗。簡(jiǎn)單地添加一個(gè) pause 命令,或者使用 waitFor 命令等待菜單項(xiàng)元素出現(xiàn),并繼續(xù)執(zhí)行下一個(gè)命令。
  修改后的將會(huì)自動(dòng)化 Dojo 組合框上的選擇的腳本展示在圖 3 中。
  圖 3. 修改后的在 Dojo 組合框中進(jìn)行選擇的 IDE 腳本

  屏幕快照展示 clickAt、waitForElement 和 ClickAt 命令已修改
  RC 代碼展示在清單 3 中。
  清單 3. 自動(dòng)化 Dojo 組合框中選擇操作的 RC 代碼
  selenium.clickAt("//div[@id='widget_offeringType']/div/div",””);
  selenium.waitForCondition("selenium.isElementPresent("offeringType_popup2")", "2000");
  selenium.clickAt("offeringType_popup2",””);
  圖 4. 日期選擇器

  展示日期選擇器的常規(guī)月歷視圖的屏幕快照
  對(duì)于圖 4 中的日期選擇器例子,執(zhí)行的操作可能不會(huì)被 IDE 記錄。編寫如下面清單 4 所示的 RC 代碼。

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