對於自動化測試,尤其是UI的自動化測試。是很多做黑盒功能測試的同學,入門自動化測試一個最為直觀的或者說最容易理解的途徑之一。
對於手工測試和自動化測試的優劣,網上有很多論述,在這里不作展開討論。但是,讓測試人員解放生產力,提高效率,把精力關注與最為重要的核心業務邏輯與測試設計上,是每個測試團隊所必需要關注的。因此,在適當的范圍內開展自動化測試,是可以提高整個測試團隊的生產率的。
對於Selenium,這個東西是一個瀏覽器應用程序測試工具。之所以選擇它做WebUI的自動化測試主要是因為它有以下兩大優勢:
1.直接在瀏覽器中運行,就像真實用戶所做的一樣,可以模擬終端用戶的操作,從最終客戶的角度來測試應用程序。(這一點和黑盒功能測試很像吧。)
2.可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中運行。其他測試工具都不能覆蓋如此多的平台。(嗯,多面能手)
對於Java語言,我只想說你用你最拿手的就好。一個好的測試人員,不應該被開發語言所束縛。不管是Java/Python/Ruby/C#.........只要你熟悉,就盡量把它用起來吧。語言只是工具。
接下來,我們好好的慢慢的理解一些東西,然后來逐步的去寫一點東西,來認識一下自動化測試框架是個什么東西。
PS:閱讀本文的同學,希望擁有JAVA語言編程基礎,了解基本的JAVA語法與數據結構,同時,對Selenium的基本API有所了解。
在寫這個框架之前,我們要明確我們主要操作的對象是什么。------->頁面元素。
我們要了解java在使用selenium時的基本操作。例如,使用以下代碼:
driver.findElement(By.xpath("/html/body/div/div/div[2]/form/button")).click();
在這里,driver的意思是定義的WebDriver,findElement是driver這個對象調用的方法----->尋找頁面元素,By.xpath是定位頁面元素的方式,(“/html/body/div/div/div[2]/form/button”)是定位頁面元素的參數,
.click()是找到頁面元素后的動作------->點擊。
那么,我們在這里考慮一下。對於通常的黑盒功能測試中,我們想在網頁上面去找一個地方,進行點擊或者輸入文字等操作的時候,
我們一般會這樣說:“用戶名輸入admin,密碼是abcd”。
但是對於測試的代碼來說,實際上有可能是:“找到頁面元素ID是UserId的元素,使用sendKeys方法,參數為admin,找到頁面元素ID是Password的元素,使用sendKeys方法,參數是abcd”。
需要解決的問題:
用戶名(我們說的)--------->找到頁面元素ID是UserId的元素(代碼),輸入admin(我們說的)--------->使用sendKeys方法,參數為admin。(代碼)
一個頁面元素的尋找需要幾個要素,尋找的方式,尋找的參數,等待的時間。另外,為了我們說的話,代碼能夠明白,需要加上一個名字,用來告訴代碼。
我們需要自己定義一個類,這個類就是頁面元素類。通過上面的說明,我們知道這個類中需要定義的基本變量。(定位方法,路徑,名字),另外,尋找路徑需要時間,我們再加上一個時間。
package webui.xUtils; public class Position { private String path; //----->路徑 //位置名字,就是我們通常意義上叫的名字。例如:用戶名輸入框 private String positionName; private ByType type;//定位方法 private int waitSec;//等待時間 //selenium的基本八種定位方法。 public enum ByType{ xpath,id,name,className, cssSelector,tagName, partialLinkText,linkText } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public String getPositionName() { return positionName; } public void setPositionName(String positionName) { this.positionName = positionName; } public ByType getType() { return type; } public void setType(ByType type) { this.type = type; } public Position(String path, ByType type, String positionName) { super(); this.path = path; this.positionName = positionName; this.type = type; }
//這種可以看作是針對iframe的情況 public Position(String path,String positionName) { super(); this.path = path; this.positionName = positionName; } public Position(String path, int waitSec, ByType type, String positionName) { super(); this.path = path; this.waitSec = waitSec; this.positionName = positionName; this.type = type; } public int getWaitSec() { return waitSec; } public void setWaitSec(int waitSec) { this.waitSec = waitSec; } }
使用上面的代碼,我們就定義了最初的一個Position類,這就是我們要尋找的頁面元素。