1. 工作原理
1.1 Selenium 1組件
Selenium 1是Selenium中最主要的第一代測試工具,它能支持幾乎所有的瀏覽器的測試,缺點在於受到JavaScript安全模型導致的限制,並且編程方式更像是面向過程的而非面向對象的。Selenium 1組件包括以下內容:
1) Selenium服務器: 它負責啓動或關閉瀏覽器,解釋和運行從測試程序中傳來的Selenium命令,並可以扮演HTTP的角色,截獲和驗證在瀏覽器和被測試的應用程序之間傳遞的HTTP消息。
2) 客戶端庫文件: 提供了各種編程語言和Selenium RC服務器之間的接口。
1.2 Selenium服務器
Selenium服務器用於接收測試程序傳來的Selenium命令,解釋並執行它們,然後向測試程序反饋測試的結果。RC服務器捆綁了Selenium Core並自動將其注入瀏覽器,Selenium Core是一系列JavaScript函數,用於調用瀏覽器內置的JavaScript解釋器,以解釋和執行Selenese命令。
該服務器同樣可以接收來自測試程序的使用簡單HTTP GET/POST請求的Selenese命令,這意味着可以使用任何支持HTTP請求的編程語言來編寫Selenium測試代碼。
1.3 Selenium客戶端庫文件
客戶端庫文件提供了對編程的支持,這樣就可以自己設計程序來運行Selenium命令。對於每一種支持的編程語言,都有不同的客戶端庫文件。Selenium客戶端庫文件提供了編程接口,用於在程序中運行selenium命令,對於每一種接口,都有對應的編程函數支持每一種Selenese命令。
客戶端庫文件可以生成Selenese命令,然後將其傳遞到Selenium服務器,對被測試的應用程序執行指定的動作或測試,也可以接收命令執行的結果,並將其傳遞給應用程序。因此要創建測試程序,只需通過客戶端庫文件API來編寫程序,用它來執行一系列Selenium命令。
2. 開始測試
2.1 啓動Selenium服務器
在執行Selenium 1測試之前,必須先啓動Selenium服務器,下載地址爲:http://docs.seleniumhq.org/download/,位於Selenium Server一欄。下載完畢將得到一個jar文件,如果已經安裝了JDK,可以直接雙擊這個jar文件來啓動selenium服務器,或通過java命令來啓動,除了這種最基本的方式,還可以通過不同的參數進行啓動。
2.2 選擇瀏覽器
要開始測試,首先得創建Selenium的實例,通過DefaultSelenium的構造函數即可創建,代碼如下:
import com.thoughtworks.selenium.DefaultSelenium; public class Main { public static void main(String[] args) { DefaultSelenium selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://www.baidu.com"); selenium.start(); } }
執行該命令後,屏幕打開兩個窗口,一個是Selenium 1的控制界面,另一個是被測試的Web程序界面,如下所示:
其中,localhost代表Selenium服務器的主機名稱或IP地址,4444代表Selenium服務器的端口,*iexplore代表加載對應的瀏覽器,也可以使用絕對路徑加載,最後包含一個起始URL,selenium會指向在該URL上的Selenium資源。
2.3 瀏覽器和頁面元素操作
1) open(url): 實現瀏覽器頁面的跳轉。
2) goBack(): 類似瀏覽器的後退功能。
3) refresh(): 此方法可以刷新整個頁面。
4) windowFocus(): 用於激活當前選中的瀏覽器窗口。
5) windowMaximize(): 用於將當前選中的瀏覽器窗口最大化。
6) close(): 用於關閉當前選中的瀏覽器窗口。
7) type(locator, value): 可以在input類型的頁面元素中輸入指定值。
8) typeKeys(locator, value): 輸入鍵盤擁有的字符,效果等同從鍵盤逐個輸入。
9) click(locator): 可以對鏈接、複選框或單選框等元素進行單擊。
10) clickAt(locator, coordString): 與click命令類似,增加單擊座標參數。
11) doubleClick(locator): 雙擊鏈接、複選框或單選框。
12) doubleClickAt(locator, coordString): 與doubleClick命令類似,增加單擊座標參數。
13) select(selectLocator, optionLocation): 選擇下拉框的指定選項,選項定位方式例如label=文本值。
14) check(locator)/UnChceck(locator): 勾選或取消勾選複選框。
15) focus(locator): 將焦點轉移到指定的元素上。
2.4 鼠標鍵盤模擬操作
1) altKeyDown(): 模擬按下Alt鍵不放,直到調用altKeyUp命令。
2) altKeyUp(): 鬆開alt鍵。
3) controlKeyDown(): 摸擬按下Ctrl鍵不放,直到調用controlKeyUp命令。
4) controlKeyUp(): 鬆開ctrl鍵。
5) shiftKeyDown(): 模擬按下Shift鍵不放,直到調用shiftKeyUp命令。
6) shiftKeyUp(): 鬆開shift鍵。
7) keyDown(locator, keySequence): 模擬按下某個鍵不放,直到調用keyUp命令。
8) keyUp(locator, keySequence): 模擬鬆開某個鍵。
9) keyPress(locator, keySequence): 模擬用戶敲擊了某個按鍵。
10) mouseDown(locator): 模擬用戶在指定元素上按下鼠標左鍵不放。
11) mouseDownAt(locator, coordString): 與mouseDown類似,增加座標參數。
12) mouseDownRight(locator): 模擬用戶在指定元素上按下鼠標右鍵不放。
13) mouseDownRightAt(locator, coordString): 與mouseDownRight類似,增加座標參數。
14) mouseUp(locator): 鬆開鼠標左鍵。
15) mouseUpAt(locator, coordString): 與mouseUp類似,增加座標參數。
16) mouseUpRight(locator): 鬆開鼠標右鍵。
17) mouseUpRightAt(locator, coordString): 與mouseUpRight類似,增加座標參數。
18) mouseOver(locator): 將鼠標移動到指定元素內。
19) mouseOut(locator): 將鼠標移動到指定元素外。
2.5 獲取頁面元素內容
1) getTitle(): 返回當前網頁的標題。
2) getLocation(): 獲取當前網頁的URL。
3) getValue(): 用於存儲input元素所存放的值,如文本框、複選框、單選框中的值。
4) isEditable(locator): 用於存儲input元素的可編輯狀態,如文本框、複選框、單選框的可編輯狀態。
5) getText(locator): 用於存儲某個元素的文本值,如鏈接、純文本等。
6) isChecked(locator): 存儲複選框或單選框的勾選情況。
7) getSelectedIndex(selectLocator): 獲取所選項在列表中的索引(從0開始)。
8) getSelectedLabel(selectLocator): 獲取指定列表中所選項的文本值。
9) getSelectedValue(selectLocator): 獲取指定列表中所選項的值。
10) getSelectOptions(selectLocator): 獲取指定列表中所有選項的文本,返回字符串數組。
11) getTable(tableCellAddress): 獲取表格中某個單元格的值,參數表達式爲“表格定位表達式.行號.列號”。
12) getAttribute(attributeLocator): 獲取指定屬性的值,參數應填寫屬性的定位表達式而非元素的定位表達式。
13) isTextPresent(pattern): 驗證指定的文本是否在頁面中出現。
14) isElementPresent(locator): 驗證指定元素是否存在於頁面中。
15) isVisible(locator): 驗證元素是否在頁面中顯示。
16) getXpathCount(locator): 獲取符合XPath表達式的元素的數量。
2.6 測試控制
1) waitForPageToLoad(timeout): 等待頁面加載完畢,open()命令已自動帶有等待載入功能。
2) setTimeOut(timeout): 用於設置默認超時時間,主要與open()或waitForXXX()等方法結合使用。
3) setSpeed(value): 設置測試的執行速度,也就是各步驟之間的時間間隔。
4) captureEntirePageScreenshot(filename, kwargs): 將當前窗口進行截圖並保存爲PNG文件。
5) captureScreenshot(filename): 截取整個屏幕的內容,不限瀏覽器。
6) highlight(locator): 暫時將指定元素的背景色改爲***,並在稍後取消該效果。
2.7 JavaScript對話框處理
1) isAlertPresent(): 驗證是否彈出過提示框,如果是返回true,否則返回false。
2) getAlert(): 獲取提示框的文本內容。
3) isConfirmationPresent(): 驗證是否彈出過確認對話框,如果是返回true,否則返回false。
4) getConfirmation(): 獲取確認框的文本內容。
5) chooseOkOnNextConfirmation(): 在下一次彈出確認對話框時選擇確定。
6) chooseCancelOnNextConfirmation(): 在下一次彈出確認對話框時選擇取消。
7) isPromptPresent(): 驗證是否彈出過輸入框。
8) getPrompt(): 獲取輸入框的文本內容。
9) answerOnNextPrompt(answer): 在下一次彈出輸入框時輸入指定的文本。
2.8 多窗口處理
1) getAllWindowIds(): 獲得所有打開窗口的ID。
2) getAllWindowNames(): 獲得所有打開窗口的名稱。
3) getAllWindowTitles(): 獲得所有打開窗口的標題。
4) waitForPopUp(windowID, timeout): 等待彈出窗口加載完畢。
5) selectPopUp(windowID)和selectWindow(windowID): 選擇指定的彈出窗口。
6) OpenWindow(url, windowID): 在指定彈出窗口中打開新的URL。
2.9 結束測試
1) close(): 關閉測試所使用的瀏覽器。
2) stop(): 中止當前對Selenium服務器的會話,並關閉Selenium控制界面。
3) shutDownSeleniumServer(): 關閉Selenium服務器。