【正文】
60。 is: +())。 } } public HomePage manageProfile() { // Page encapsulation to manage profile functionality return new HomePage(selenium)。 } /*More methods offering the services represented by Home Page of Logged User. These methods in turn might return more Page Objects for example click on Compose mail button could return ComposeMail class object*/} 現(xiàn)在,使用上述兩個(gè)頁面對象的登錄測試代碼,如下所示。/**** Tests login feature*/public class TestLogin { public void testLogin() { SignInPage signInPage = new SignInPage(selenium)。 HomePage homePage = (userName, password)。 ((pose button), Login was unsuccessful)。 }} 怎么樣使用頁面對象進(jìn)行設(shè)計(jì)有很大的靈活性,但也有一些基本的規(guī)則以保證得到測試代碼具有所需的可維護(hù)性。頁面對象本身不應(yīng)該被驗(yàn)證或斷言。這應(yīng)該是測試的一部分,并應(yīng)始終在測試代碼中去驗(yàn)證或斷言,而不要放在頁面對象內(nèi)。頁面對象將包含頁面展現(xiàn),方法的形式表示頁面提供的服務(wù),但不需要包含應(yīng)該在測試代碼中維護(hù)的代碼。 唯一的應(yīng)該存在頁面對象中的驗(yàn)證方法是,驗(yàn)證頁面、頁面上的重要元素,被正確的加載。這這個(gè)驗(yàn)證應(yīng)該在頁面初始化時(shí)進(jìn)行。在上面的例子中,SignInPage 和 HomePage 的構(gòu)造函數(shù)檢查了期望的頁面是否可用,是否準(zhǔn)備好接受測試代碼的請求?! №撁鎸ο蟛⒉灰欢ㄒ碚麄€(gè)頁面。頁面對象設(shè)計(jì)模式可用于表示頁面上組件。在待測應(yīng)用上的一個(gè)頁面若有多個(gè)組件,每個(gè)組件對應(yīng)一個(gè)頁面對象可以提高可維護(hù)性?! ≡跍y試時(shí),還會遇到其他的測試設(shè)計(jì)模式。有些人用一個(gè)頁面工廠模式來實(shí)例化頁面對象。討論所有的這些測試模式,超出了本文檔的的范圍。在這里,我們只為大家介紹概念,使讀者知道這些東西可以些什么。正如前面提到的,很多人都在博客上討論這個(gè)話題,我們鼓勵(lì)讀者搜索這些話題。 數(shù)據(jù)驅(qū)動(dòng)測試 數(shù)據(jù)驅(qū)動(dòng)測試是指相同的測試(或測試集)可以使用不同的數(shù)據(jù)多次執(zhí)行。這些數(shù)據(jù)集往往來自外部文件,如csv文件,文本文件,或者是從數(shù)據(jù)庫加載。數(shù)據(jù)驅(qū)動(dòng)測試是一種常用的自動(dòng)化測試技術(shù),使用不同的輸入對應(yīng)用程序進(jìn)行多次驗(yàn)證。當(dāng)測試被針對不同的數(shù)據(jù)進(jìn)行設(shè)計(jì)時(shí),所輸入的數(shù)據(jù)就可以擴(kuò)展,基本上不需要修改測試代碼就可以進(jìn)行更多的測試。 Collection of String valuessource = open(, r)values = ()() Execute For loop for each String in the values arrayfor search in values: (/) (q, search) (btnG) (30000) ((Results * for + search)) 上面的Python代碼打開一個(gè)文本文件,這個(gè)文件每行包含不同的搜索字符串。然后代碼保存字符串到一個(gè)字符串?dāng)?shù)組,對數(shù)值進(jìn)行遍歷,使用搜索字符串進(jìn)行查詢,并進(jìn)行斷言。 這是一個(gè)非常簡單的例子,但其中的思路表明,可以很簡單的使用編程、腳本語言進(jìn)行數(shù)據(jù)驅(qū)動(dòng)的測試。有關(guān)更多示例,請參閱 Selenium RC wiki 來了解如何從電子表格讀取數(shù)據(jù)或使用TestNG的提供數(shù)據(jù)。此外,這是一個(gè)在自動(dòng)化測試的專業(yè)人士圈內(nèi)眾所周知的話題之一,包括那些不使用Selenium的自動(dòng)化圈子,因此搜索互聯(lián)網(wǎng)上的“數(shù)據(jù)驅(qū)動(dòng)測試”,會得到許多關(guān)于這一主題的博客?! ?shù)據(jù)庫驗(yàn)證 另一種常見的測試類型是,比較用戶界面上的數(shù)據(jù)和存儲在后臺數(shù)據(jù)庫中的數(shù)據(jù)。因?yàn)槟阋部梢允褂靡环N編程語言進(jìn)行數(shù)據(jù)庫查詢,假設(shè)你有數(shù)據(jù)庫相關(guān)的函數(shù),你可以用它們來檢索數(shù)據(jù),然后使用這些數(shù)據(jù)來驗(yàn)證頁面上所顯示的數(shù)據(jù)是正確的?! 】紤]如下例子,從數(shù)據(jù)庫中進(jìn)行檢索注冊電子郵件地址,然后再和界面上的數(shù)據(jù)進(jìn)行比較。代碼如下,先建立一個(gè)數(shù)據(jù)庫連接,并從數(shù)據(jù)庫中檢索數(shù)據(jù),使用的是Java語言:// Load Microsoft SQL Server JDBC driver.()。// Prepare connection url.String url = jdbc:sqlserver://:1433。DatabaseName=TEST_DB。// Get connection to DB.public static Connection con =(url, username, password)。// Create statement object which would be used in writing DDL and DML// SQL statement.public static Statement stmt = ()。// Send SQL SELECT statements to the database via the // method which returns the requested information as rows of data in a// ResultSet object.ResultSet result = (select top 1 _address from user_register_table)。// Fetch value of _address from result object.String address = (_address)。// Use the Address value to login to application.(userID, address)。(password, secretPassword)。(loginButton)。(timeOut)。((Wele back +address), Unable to log in for user +address) 這是一個(gè)簡單的Java例子從數(shù)據(jù)庫中檢索數(shù)據(jù)。