天天看點

《精通自動化測試架構設計》—第2章 2.4節使用XML檔案

本節書摘來自異步社群《精通自動化測試架構設計》一書中的第2章,第2.4節使用xml檔案,作者陳冬嚴 , 邵傑明 , 王東剛 , 蔣濤,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

2.4 使用xml檔案

xml,可擴充的辨別語言(extensible markup language),其先驅是sgml和html。1996年網際網路協會(w3c)開始設計一種可擴充的标記語言,使其能夠将sgml的靈活性和強大功能與已經被廣泛采用的html結合起來。1998年2月,xml 1.0 成為了w3c 的推薦标準(順便說一下webdriver現在也是w3c推薦标準)。xml最大的優勢在于對各種資料的跨平台管理,任何作業系統,包括windows 、macos 、linux 以及其他平台都可以通過xml的解析器來讀取xml資料,并且以xml格式輸出結果。雖然早在2004年就有人喊出了“xml在網際網路上已經失敗”(xml on the web has failed[1])的口号,但目前xml仍是目前事實上的系統間資料交換的标準。

2.4.1 webdriver中的定位方法

俗話說女大十八變。用這句話來形容b/s架構的軟體産品的使用者界面也是非常貼切的。ui自動化的一大挑戰就是如何應對經常變化的界面,将界面定位的維護成本控制在一個較為合理的範圍内。這其中一個比較好的實踐就是将界面元素的定位資訊儲存在外部檔案中,如xml,作為運作時架構類的輸入資料,動态地導入到其對應的頁面類中供定位使用。

webdriver中通過實作了by這一接口的各個driver類的執行個體來進行元素定位。典型的用法如下例所示:

第一個方法傳回一個webelement執行個體或者抛出異常。後者傳回所有找到的webelement的執行個體清單或者空清單。

其中,by這個接口中定義的元素定位的方法有如下8種。

按照一般的了解,通過id或者name去定位一個元素效率上是最高的,也是比較推薦的一種方式。不過在很多情況下,一些開發規範遵守的不是很好的工程組織,可能對于給每個頁面元素進行命名這種事情做得并不太好,或者随着現在比較主流的前端架構,或者開發庫,如extjs、jquery等,一般都采用随機或者相同的id、name等,需要采用更為複雜的定位方法。這在後續章節中會有詳細的介紹。

接下來根據一個樣例來介紹如何進行 xml 檔案的解析。假定有如下一個名叫locatorpaser.xml的檔案。

從該xml檔案的格式上看,單個定位資料以locator标記為一個元素,元素屬性分别有name、by,而元素内容就是by對應的定位方法需要的定位資訊。locator之間彼此獨立,并同屬于一個帶locators标簽的父元素。

從檔案内容上看,該xml檔案維護着某一被測應用ui自動化測試中的定位資訊,并且顯而易見是一個登入頁面中有關使用者名、密碼輸入框以及登入按鈕這3個頁面元素的定位資訊。其中使用者名和密碼輸入框分别使用了"id"、"name"等屬性,而登入按鈕則使用了xpath的定位串。

在實踐中使用最為廣泛、表現也最為穩定的可能是xpath或者cssselector這兩大流派。首先,對于其他定位方式來說,這兩個都是可以由相應方法實作相同的目的。其次兩者雖然采用的技術路線不同,所能達到的效果也基本是伯仲之間。是以,隻要學好學精一門,其餘略懂即可。在本書中主要采用xpath來介紹相關的元素定位技術。相信采用cssselector的讀者可以較為友善地進行轉換。當然本節的主題是有關xml的解析,有關xpath等元素定位的基本方法,可以參見本書最後一部分有關webdriver的基礎知識介紹。

2.4.2 使用dom4j進行解析

sax(simple api for xml)是一種事件驅動的xml api,其采用了輸入流的方法,按照事件模型來解析xml文檔。因為不必像dom那樣加載整個文檔,是以它對記憶體的要求較低,解析更快速、更輕量,非常适合于本案例中對于xml檔案的隻讀通路。

下述locatorpaser類将對前述的xml檔案進行解析,最終擷取到像"xpath=//input [@name='login_submit']"這樣的定位串,可以用于後續的元素定位。類的具體實作如下:

上述測試用例在一台筆記本上的執行結果是:

結果正确,檔案解析的效率也是不錯的。