**
wpf強化了使用者介面的自動化測試,使測試人員可以從繁瑣的ui測試中解脫出來,將更多的精力用於更加底層的測試工作。
從visual studio2005開始,微軟將測試整合到其開發工具中,從工具上保證了測試工作在軟體生命週期中的重要地位。而從net3.0的wpf開始,微軟通過其ui的自動化支援,協助開發人員為介面元素建立自動化測試標識。
wpf的ui自動化技術
wpf為windows桌面應用程式和web應用程式提供了乙個智慧型客戶端開發模型,以方便構建豐富統一的ui、**、圖形影象、動畫和文件等。一方面wpf可以促使開發人員更積極地參與到使用者介面的開發,另一方面提公升使用者體驗的滿意度。
在傳統的軟體開發中,使用者介面開發費工費時,並且跨越了表現層和技術層,使一般的程式設計師都苦惱不已。wpf則從技術層面上減輕了這種複雜性,提公升了開發人員參與使用者介面設計開發的積極性。
ui自動化對大多數使用者介面元素提供可程式設計訪問,即通過除標準輸入輸出 (比如鍵盤滑鼠) 方式以外的方法操作ui。ui自動化核心層遮蔽不同框架技術下多種ui元素的差異,確保ui自動化客戶應用程式能在多種框架技術下工作。比如,wpf按鈕的內容(content)屬性,標準win32按鈕的標題(caption)屬性以及html頁面上顯示影象的替換文字(alt)屬性等都對映為wpf中ui自動化檢視中單一的名字(name)屬性。藉此,一些輔助技術產品和自動化測試框架可獲得其所需要的獲取使用者介面資訊統一的程式化訪問方法,此外,通過自動化的使用者介面技術,應用開發商也可以提高其產品的易用性。
ui自動化模型
現有技術下實現ui自動化測試系統開發需要通過不同方法獲得和展現ui元素資訊,開發人員需要花費大量的時間和精力去蒐集這些必需的ui元素資訊,而不能集中精力於系統特徵和功能的實現上。借助於wpf的ui自動化所提供的統一的控制模式,通過其等價的名字屬性 (nameproperty) 就可以輕鬆實現對不同ui元素的統一控制。ui自動化技術減少了此類應用系統的開發成本,將成為下一代輔助訪問技術產品和自動化測試系統主要的介面資訊資源提供者。
ui自動化包括兩部分。ui自動化服務提供者 (ui automation providers) 和ui自動化客戶程式 (ui automation clients) 。ui自動化服務提供者是提供ui自動化服務的應用程式,比如word, excel及其它基於windows的應用程式 等,為使用者通過輔助程式技術對其訪問提供支援。ui自動化客戶端程式是實現使用者介面自動化訪問的輔助技術程式,比如word和excel中**用程式訪問的物件模型及其巨集指令碼等。相應的,對開發人員來說,可以通過呼叫ui自動化提供者應用程式介面(ui automation providers api)建立使用者介面控制元素,也可以通過呼叫ui自動化客戶端應用程式介面(ui automation clients api)建立應用程式,通過ui自動化核心層與ui自動化介面控制元素進行通訊。
ui自動化通過把介面上乙個個的ui元素作為自動化元素 (automationelement)暴露給客戶端應用程式供其呼叫。所有ui自動化元素組成以桌面(desktop)為根節點的樹型層次結構,樹狀結構包含所有正在執行的應用程式,每乙個正在執行的應用程式都是這個根的子節點,其每乙個可能與使用者進行互動的介面元素都是一系列層次化的自動化元素(automationelement)。樹型層次結構通過原始檢視(raw view) 的形式展現給客戶端,客戶端可以通過過濾自動化元素樹的原始檢視 (raw view) ,得到控制項檢視 (control view) 和內容項檢視 (content view) 。 net3.0提供ui 探測程式uispy.exe供開發人員呼叫以察看ui自動化元素檢視。
自動化元素 ( automationelement)物件包括ui元素在介面上所呈現的兩類共有屬性。乙個是控制型別屬性(control type),控制型別屬性定義介面元素的基本表現形式和功能,並以此作為單一的識別實體。比如,按鈕button型別或者多選框check box型別。乙個是控制模式(control patterns),控制模式提供乙個統一的方法來構建和表達控制型別所擁有的功能。比如,可以對擁有被呼叫功能的控制型別比如按鈕button型別使用呼叫模式,對編輯類控制型別使用文字模式等。控制模式通過公開方法呼叫使客戶端得到介面元素進一步的詳細資訊並提供輸入。微軟鑑別出18種控制模式,通過這18種控制模式可以展現出任何類ui元素及其任意組合所能實現的所有事情。
注意,控制型別和控制模式之間並不是一一對應的關係。乙個控制模式可以被多種控制型別支援,乙個控制型別也可以支援多種控制模式,每乙個組合都展現其不同的行為樣式。比如,乙個下拉框型別(combo box)具有至少兩種控制模式:乙個是呈現其摺疊和展開能力的模式(expandcollapsepattern),另乙個是呈現其選擇項的可選擇模式(selectionitempattern)。
wpf的ui自動化測試
我們知道,現有技術條件下實現ui自動化測試系統開發需要分別實現不同技術條件下的ui元素的鑑別和控制,實現複雜而且有效性不高。而借助於wpf的ui自動化所提供的統一的控制模式就可以輕鬆實現。
作為ui自動化服務提供者,在開發乙個應用程式的時候,必須注意終端使用者通過標準鍵盤和滑鼠操作ui物件進行互動的行為。一旦這些關鍵行為被確定,則其相應的反映ui元素功能和行為的ui自動化控制模式就需要被應用程式實現。比如,要實現乙個組合框物件,就需要確定使用者對組合框所進行的操作控制模式,使用者通常需要呼叫組合框的摺疊和展開模式去隱藏和顯示其可選擇項列表,也需要呼叫其編輯模式通過鍵盤輸入增加乙個新的選擇項。ui自動化服務提供者實現控制模式的介面位於system.windows.automation.provider 名字空間中,其所有控制模式介面都包含字尾「provider」,比如呼叫模式介面 iinvokeprovider,文字模式介面itextprovider等。所有標準wpf控制項自動支援ui自動化,應用程式自定義的控制項必須提供支援ui自動化的訪問類和介面。
作為ui自動化客戶端,通過呼叫ui自動化的控制模式類提供的方法和屬性得到ui元素的控制資訊和內容資訊,達到對ui操作和控制目的。這些控制模式類位於system.windows.automation名字空間,其所有控制模式類都包含字尾「pattern」 ,比如呼叫模式類invokepattern,文字模式類textpattern等。
控制模式將乙個介面元素物件所支援的結構,方法,屬性和事件結合在一起。控制模式對於ui元素的關係相比於介面對於com物件的關係。對於com,我們可以通過詢問com物件得到它所支援的介面,然後通過介面呼叫對應的com功能。對於ui自動化物件,客戶端可以通過詢問ui物件得到它所支援的控制模式,然後通過其控制模式呼叫得到其結構、方法、屬性和事件,從而實現和ui的互動。
例如,提供者實現了多行文字編輯控制的滾動模式介面iscrollprovider,當乙個客戶端程式探測到這個介面元素支援滾動模式,則可以通過呼叫滾動模式類scrollpattern得到這個文字編輯框的屬性、方法和事件來收集所支援的文字滾動資訊,通過程式化的方法實現文字編輯框內容的滾動。
綜上所述,wpf的ui自動化技術旨在提供乙個統一的ui控制訪問方式,由ui自動化服務提供者 (ui automation providers) 實現控制模式介面,ui自動化客戶程式 (ui automation clients) 則通過呼叫相應的控制模式類來實現ui自動化操作和控制。
鏈結
軟體測試的花費往往很高。自動化是乙個節省時間和成本的好辦法。但是軟體自動化測試的工具和技術,往往缺乏通用的適用性和伸縮性。為了實現測試過程的自動化,我們依據軟體需求或規格設計說明書,針對測試物件,自動生成測試用例,使測試能自動執行,自動驗證其正確性。
在整個軟體測試過程中,由於ui在提公升使用者體驗方面的特殊作用,ui級別的測試不但在於驗證系統的正確性和有效性,而且在驗證整個系統的易用性、行為一致性和穩定性方面有著非常重要的作用。
但ui自動化測試歷來困難。一般來說,乙個系統大量的ui人為干預,都需要測試。今天我們還沒有乙個完全能達到此一目標而頗具規模的系統。ui自動化程度仍停留在自動化測試指令碼的水平。
UI自動化測試隨筆
昨天給開發的同事講我們正在做的自動化測試,同事問了句 為什麼api的測試不需要寫 了,而ui的測試還需要寫那麼多 呢?能不寫 麼?目前我們的自動化測試的現狀 目前主要覆蓋兩個部分 api的測試和ui的測試。對於api的測試經過框架的封裝,基本上只需要編寫乙個xml描述的test case就可以了,x...
UI自動化測試框架
python selenium unittest ddt htmlreport分布式資料驅動自動化測試框架結構 1 business 公共業務模組,如登入模組,可以把登入模組進行封裝供呼叫 login business.py from page object.common page.login pa...
UI自動化測試 介面測試等自動化測試策略
今天跟大家介紹ui測試 介面測試 單元測試主要內容,以及每種測試花費時間討論。ui測試 selenium ui測試是最接近軟體真實使用者使用行為的測試型別。通常是模擬真實使用者使用軟體的行為,即模擬使用者在軟體介面上的各種操作,並驗證這些操作對應的結果是否正確。介面測試 api測試 api測試,主要...