天天看點

java selenium架構_基于Java+Selenium的WebUI自動化測試架構(一)

對于自動化測試,尤其是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類,這就是我們要尋找的頁面元素。