如何處理自動化測試的天敵:畫面改動?

如何處理自動化測試的天敵:畫面改動?

畫面的修改會導致自動化測試的失敗,也讓自動化測試必須時常的跟著修改。

這篇文章主要 針對畫面不斷在修改,同時希望可以執行 End to End 自動化測試時,

做一些實務經驗上的分享與建議,最後還是一樣用 Java 舉一個程式實作。

自動化測試的建議

針對畫面時常還在修改,但是又希望可以投資自動化測試,筆者提供幾個建議

1. 自動化測試的範圍盡量不要 cover 畫面經常修改的部分。

2. 可以使用 unit Testing or 針對 Http Request / Response 的內容,或是 Restful API 直接做測試。跳過畫面驗證的部分。

3. 適當的挑選 Web Element UI locator。例如 Xpath or ID。這樣一來,畫面雖然修改,字型、顏色、大小、位置有改變,

但是只要 Xpath or ID 不變,自動化測試還是可以正常執行。

4. 如果還是要用 Selenium 自動化測試執行的話,可以採用 “Page Object”

 

什麼是 Page Object

Page Object 主要的目的是將網頁的原件與測試程式的步驟分開。例如這個程式範例,

PageObjectsGoogleHome.java: 這個程式主要定義網頁上有哪些原件。Google Home page 上有 Search box與 Search Button。這兩個原件。

testGooglePageObjects.Java: 這個程式定義整個測試的流程與步驟。例如,輸入”Page Objects”, 按下 Search。驗證網頁 title。

因此未來當 google home Page 網頁元件有修改的時候,我們只需要修改 “PageObjectsGoogleHome.java” 即可。

網頁元件與測試步驟流程區隔! 這也是 UI 自動化測試的 Design Pattern 之一。

測試情境

下面這個測試範例主要執行的測試步驟如下

1. 瀏覽 Google

2. 輸入 Page Objects

3. 點擊Search button

4. 印出目前的 Window Title

程式範例

PageObjectsGoogleHome.java

[pastacode lang=”java” message=”” highlight=”” provider=”manual”]

import org.openqa.selenium.*;


public class PageObjectsGoogleHome {
	   
	private static WebElement element = null;

	public static WebElement GoogleSearchTxt(WebDriver driver)
	{
	      element = driver.findElement(By.name("q"));
	      return element;
	 }
	   
	public static WebElement GoogleSearchBtn(WebDriver driver)
	{
	      element = driver.findElement(By.name("btnK"));
	      return element;
	 }

}

[/pastacode]

testGooglePageObjects.Java

[pastacode lang=”java” message=”” highlight=”” provider=”manual”]

package myJava;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class testGooglePageObjects {

   private static WebDriver driver = null;
  
   public static void main(String[] args) throws InterruptedException {
   
      driver = new FirefoxDriver();
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      driver.get("http://www.google.com");
  
      //Use page Object library now
      PageObjectsGoogleHome.GoogleSearchTxt(driver).sendKeys("Page Objects");	
      PageObjectsGoogleHome.GoogleSearchBtn(driver).click();
      
      
      Thread.sleep(3000);
      System.out.println("current window title: " + driver.getTitle());
      driver.close();
      }
   }

[/pastacode]

 

Leave a Reply

Your email address will not be published. Required fields are marked *