您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
Selenium自動化測試用例設計注意事項(二)
作者:網(wǎng)絡轉載 發(fā)布時間:[ 2013/1/28 10:52:45 ] 推薦標簽:

  考慮如下屬性文件prop.properties,為上述代碼例子中的UI元素指定了 “別名”:

admin.username = loginForm:tbUsername
admin.loginbutton = loginForm:btnLogin
admin.events.createnewevent = adminHomeForm:_activitynew
admin.events.cancel = addEditEventForm:_IDcancel
admin.events.viewoldevents = adminHomeForm:_activityold

  其中定位信息還是指向頁面的HTML對象,但我們在測試腳本和UI元素之間引入一層抽象層。測試類從屬性文件中讀取定位信息,從而實現(xiàn)UI映射。

  頁面對象設計模式

  頁面對象設計模式,可以提高自動化測試腳本的維護性、減少代碼重復,越發(fā)流行。頁面對象是一個面向對象的類,作為待測應用對外提供的接口。測試代碼在需要和UI頁面交互時,使用此頁面對象類的方法。這樣做的好處是,如果UI頁面發(fā)生變化,測試代碼本身并不需要改變,只需要改變相應的頁面對象的代碼。為適應新UI頁面的所有更改,都位于一個地方。

  頁面對象設計模式具有以下優(yōu)點:

  1、測試代碼和頁面相關的代碼,比如頁面元素定位信息(若使用UI映射,也包括定位信息的應用),頁面布局等,完全分離;

  2、可以維護單一的儲存庫來存儲頁面提供的服務或操作,而不是把他們分散在測試代碼中。

  在這兩種情況下,這使得任何由于UI界面變化導致的修改,都可以在一個地方進行修改。關于該技術的更多有用信息,可以在眾多的博客上找到。我們也鼓勵讀者去閱讀更多。 許多人寫這樣的設計模式和超出本用戶指南的范圍,可以提供有用的提示。不過,為了讓你開始,我們將舉例說明頁面對象的一個簡單的例子。

  首先,考慮一個例子,典型的自動化測試,不使用頁面對象。

/***
 * Tests login feature
 */
public class Login {
 
        public void testLogin() {
                selenium.type("inputBox", "testUser");
                selenium.type("password", "my supersecret password");
                selenium.click("sign-in");
                selenium.waitForPageToLoad("PageWaitPeriod");
                Assert.assertTrue(selenium.isElementPresent("compose button"),
                                "Login was unsuccessful");
        }
}

  這種方法有兩個問題。

  1、沒有分離測試代碼和待測應用的定位器(在這個例子中是ID);兩者都交織在一個單一方法中。如果待測應用UI改變了它的標識,布局,或登錄輸入和處理的方式變化,測試代碼本身必須改變。

  2、ID定位信息分散在多個測試代碼中,所有的測試不得不使用此登錄頁面。

  使用頁面對象技術,上述測試代碼可以按如下方式重寫,為登錄頁面的頁面對象例子:

/**
 * Page Object encapsulates the Sign-in page.
 */
public class SignInPage {
 
        private Selenium selenium;
 
        public SignInPage(Selenium selenium) {
                this.selenium = selenium;
                if(!selenium.getTitle().equals("Sign in page")) {
                        throw new IllegalStateException("This is not sign in page, current page is: "
                                        +selenium.getLocation());
                }
        }
 
        /**
         * Login as valid user
         *
         * @param userName
         * @param password
         * @return HomePage object
         */
        public HomePage loginValidUser(String userName, String password) {
                selenium.type("usernamefield", userName);
                selenium.type("passwordfield", password);
                selenium.click("sign-in");
                selenium.waitForPageToLoad("waitPeriod");
 
                return new HomePage(selenium);
        }
}

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