面類軟件,其界面展現(xiàn)方式主要分為兩種:基于菜單窗口和基于對 話框窗口的界面。這兩種圖形用戶界面類軟件雖然展現(xiàn)風(fēng)格有所不同,但可采用相同 的方法獲取軟件功能。本方案主要利用微軟Windows操作系統(tǒng)提供的Microsoftn Automation(簡稱WA)框架,對被測軟件的用戶界面進行分析,獲取主界面中的菜單和控 件元素,而后通過自動觸發(fā)菜單和控件的點擊事件,得到次級菜單或次級對話框窗口,依此 方式,遞歸找出被測軟件所有層級的菜單或?qū)υ捒蛑邪脑?,通過分析菜單層級關(guān)系 或?qū)υ捒虼翱谡{(diào)用關(guān)系,得出被測軟件的功能組成結(jié)構(gòu)。本方案的主要工作流程如圖1所 示,將被測軟件主界面劃分為菜單類軟件和對話框類軟件;針對菜單類軟件獲取主界面菜 單項,針對對話框類軟件獲取主界面按鈕控件;采用遞歸方法分別獲取菜單層級關(guān)系和窗 口調(diào)用關(guān)系;根據(jù)菜單層級關(guān)系和窗口調(diào)用關(guān)系生成功能及功能組成圖。
[0034] 微軟用戶交互自動化(MicrosoftUIAutomation,簡稱"MS-UIA")框架是MSAA 技術(shù)的一個替代品:即讓控件和應(yīng)用程序具有更好的可達性(accessible)。簡單來講,它 就是幾個dll,提供了一套API和Interface,及其相應(yīng)的模式,讓軟件的開發(fā)者遵循該模式 去實現(xiàn)相應(yīng)的interface,從而軟件的使用者能更好的使用該軟件。IA重新設(shè)計了一套架 構(gòu),無論是對傳統(tǒng)的winform,還是新的wpf,定義了一套統(tǒng)一的模型;其API的使用也相對 更簡單;同時,和.netframework3.0-起,也有個UISpy的工具,能輔助大家來使用UIA。
[0035] MS-UIA明確定義了兩個role :UIA Provider即軟件本身,主要是軟件的開發(fā)人員 依據(jù)相應(yīng)的模式去實現(xiàn)相關(guān)的interface, UIA Client即自動化腳本和相關(guān)的assistive technology applications,從測試人員的角度出發(fā),主要是調(diào)用相應(yīng)的API去實現(xiàn)自動化 測試腳本。
[0036] UIAProvider:開發(fā)人員確定控件行為并實現(xiàn)對應(yīng)的UIAcontrolpattern,對 于標(biāo)準控件而言,默認是支持UIA的,而對于自定義的控件,需要實現(xiàn)該控件的行為對應(yīng)于 UIA所定義的interface。
[0037] UIAClient:相對而言,UIAClient則簡單了很多,只需調(diào)用相關(guān)的MAAPI去完 成自動化測試腳本。
[0038] UIA主要有 4 個DLL:UIAutomationProvider.dll,定義了各種行為的interface, 例如,假設(shè)有個自定義的控件,開發(fā)人員覺得它需要支持Dock行為,就需要實現(xiàn) IDockProvider接口。UIAutomaitonClient.dll,定義了各種控件模式,以及一些用來支持 更好的定位控件的輔助條件搜索類。UIAutomationCore.dll則是用來支持UIAprovider 和client之間的通信的。UIAutomationClientssideProviders.dll則主要是用來支持傳 統(tǒng)的winform的標(biāo)準控件的。
[0039]
[0040] UIA的TreeModel,在MA中,程序n的每一個部分都被認為是一個 AutomationElement類,他們是一個樹狀的結(jié)構(gòu),Desktop被認為是每個windowsbasedapp 的UIA樹狀圖的根,從類的定義中,我們也可以看到一個AutomationElement類中有一個 static的RootElement屬性。該樹的結(jié)構(gòu)中,一共有3中ViewModel,分別為RawView, ControlView和ContentView。RawView提供的信息最多,也是其他view的基礎(chǔ),最貼 近于程序本身的編程結(jié)構(gòu);ControlView是RawView的子集,它最貼近于最終用戶所能 感知的UI結(jié)構(gòu),但是它不包含不能和用戶相互交互的一些UI,例如Iistview的header, toolbar等等。而ContentView則是ControlView的一個子集,它只包含能和用戶直接交 互真實信息的控件,比如接受鍵盤輸入的Textbox,選擇不同值的Combobox;而諸如Iable 等控件則不會包含在其中。大家可以打開UISpy,針對某個application,看看3個view有 什么不同,這樣會有一個比較直觀的認識。
[0041]UIA的ControlPattern,UIA大概一共定義了 38種pattern,代表了常用的控件 行為,他們也會提供一些具體的功能性的屬性。對于WAProvider來說,所做的事情就是 定義控件相關(guān)的行為,找到該行為對應(yīng)的模式,并實現(xiàn)該模式;對于client而言,即訪問相 關(guān)的方法和屬性,來實現(xiàn)自動化。如某個控件需要有ValuePattern,則provider和client 相對應(yīng)的則為:
【主權(quán)項】
1. 一種圖形用戶界面軟件功能獲取方法,其特征在于,包括: 51、 利用Windows操作系統(tǒng)提供的微軟用戶交互自動化MS-UIA框架,對被測軟件的用 戶界面進行分析,獲取主界面中的菜單類和對話框類控件元素; 52、 通過自動觸發(fā)菜單和控件的點擊事件,得到次級菜單或次級對話框窗口,依此方 式,遞歸找出被測軟件所有層級的菜單類或?qū)υ捒蝾惪丶邪脑兀? 53、 通過分析菜單層級關(guān)系或?qū)υ捒虼翱谡{(diào)用關(guān)系,得出被測軟件的功能組成結(jié)構(gòu)。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S1進一步包括: 通過當(dāng)前窗口句柄構(gòu)建窗口中控件樹的根結(jié)點,使用UIA框架提供的TreeWa化er類, 采用深度遍歷算法遞歸構(gòu)造W當(dāng)前窗口為根結(jié)點的控件樹,從而獲取窗口中所有控件及其 信息。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述采用深度遍歷算法遞歸構(gòu)造W當(dāng)前 窗口為根結(jié)點的控件樹,進一步包括: 將被測程序的主窗口參數(shù)rootElement作為遍歷的起點; 遍歷時首先找到rootElement的第一個子結(jié)點,如果該結(jié)點是菜單控件,則需要遍歷 當(dāng)前結(jié)點的所有子結(jié)點,該時,先將菜單展開,然后調(diào)用展開后的子結(jié)點的Invoke控件模 式,其他結(jié)點類型在該里不做處理; 遞歸遍歷當(dāng)前結(jié)點的子結(jié)點控件,處理完子結(jié)點控件后,處理當(dāng)前結(jié)點的兄弟結(jié)點。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述菜單或?qū)υ捒虻膶蛹夑P(guān)系獲取,進一 步包括: 獲得到被測軟件主界面窗口的所有控件及其信息,該信息W樹形結(jié)構(gòu)展示; 根據(jù)控件類型ControlType屬性進行過濾得到控件類型為菜單或?qū)υ捒虻慕缑嬖兀? 當(dāng)控件類型為菜單界面元素時,獲取主菜單,通過調(diào)用invoke控件模式觸發(fā)GUI事件, 模擬人工點擊菜單項的操作,遞歸查找當(dāng)前菜單的子菜單項,并保存主菜單與子菜單的層 級關(guān)系; 當(dāng)控件類型為對話框界面元素時,獲取主窗口,通過調(diào)用invoke控件模式觸發(fā)GUI事 件,模擬人工點擊各按鈕的操作,遞歸查找當(dāng)前窗口的子窗口,W獲取窗口間的調(diào)用關(guān)系, 并將窗口間的調(diào)用關(guān)系保存為主窗口與子窗口的層級關(guān)系。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述遞歸查找當(dāng)前菜單的子菜單項,并保 存主菜單與子菜單的層級關(guān)系,進一步包括: 傳入主窗口節(jié)點,并獲取第一個孩子節(jié)點;判斷該節(jié)點是否為空,若該節(jié)點為非空,貝U 進一步判斷該節(jié)點是否為菜單,若該節(jié)點是菜單,進入Invoke控件模式,并遞歸遍歷子節(jié) 點,若該節(jié)點不是菜單,遞歸遍歷子節(jié)點;若該節(jié)點不是菜單,遞歸遍歷子節(jié)點;遞歸之后, 處理兄弟節(jié)點;若該節(jié)點為空則結(jié)束。
6. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述遞歸查找當(dāng)前窗口的子窗口,W獲取 窗口間的調(diào)用關(guān)系,并將窗口間的調(diào)用關(guān)系保存為主窗口與子窗口的層級關(guān)系,進一步包 括: 傳入主窗口節(jié)點;獲取第一個孩子節(jié)點;判斷該節(jié)點是否為空,若該節(jié)點為非空,進一 步判斷該節(jié)點是否為按鈕,若該節(jié)點是按鈕,則進入Invoke控件模式,并遞歸遍歷子節(jié)點, 隨后處理兄弟節(jié)點;若該節(jié)點不是按鈕則結(jié)束;若該節(jié)點為空則結(jié)束。
7. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述S3進一步包括: 菜單層級調(diào)用關(guān)系鏈表和窗口調(diào)用鏈表中包含了軟件的功能要素,從鏈表的起始結(jié)點 到某個終止結(jié)點構(gòu)成了軟件的一個功能,鏈表的所有路徑構(gòu)成了軟件所具有的功能; 在分別獲取了菜單和窗口及其層級調(diào)用關(guān)系之后,先找到功能的所有子結(jié)點,通過回 溯找到從該子結(jié)點向上的功能調(diào)用關(guān)系,通過遍歷菜單層級調(diào)用關(guān)系鏈表和窗口調(diào)用鏈 表,并將遍歷結(jié)果分別轉(zhuǎn)換為文本顯示方式和圖形顯示方式,W得到被測軟件的所有功能 和功能組成結(jié)構(gòu)圖。
8. -種圖形用戶界面軟件功能獲取裝置,其特征在于,包括: 元素分析模塊,用于利用Windows操作系統(tǒng)提供的微軟用戶交互自動化MS-UIA框架, 對被測軟件的用戶界面進行分析,獲取主界面中的菜單類和對話框類控件元素; 層級分析模塊,用于通過自動觸發(fā)菜單和控件的點擊事件,得到次級菜單或次級對話 框窗口,依此方式,遞歸找出被測軟件所有層級的菜單類或?qū)υ捒蝾惪丶邪脑兀?結(jié)構(gòu)生成模塊,用于通過分析菜單層級關(guān)系或?qū)υ捒虼翱谡{(diào)用關(guān)系,得出被測軟件的 功能組成結(jié)構(gòu)。
【專利摘要】本發(fā)明公開一種圖形用戶界面軟件功能獲取方法,包括:利用Windows操作系統(tǒng)提供的微軟用戶交互自動化MS-UIA框架,對被測軟件的用戶界面進行分析,獲取主界面中的菜單類和對話框類控件元素;通過自動觸發(fā)菜單和控件的點擊事件,得到次級菜單或次級對話框窗口,依此方式,遞歸找出被測軟件所有層級的菜單類或?qū)υ捒蝾惪丶邪脑?;通過分析菜單層級關(guān)系或?qū)υ捒虼翱谡{(diào)用關(guān)系,得出被測軟件的功能組成結(jié)構(gòu)。本發(fā)明公開的圖形用戶界面軟件功能獲取方法及裝置,能夠自動、快速、準確地獲取圖形用戶界面軟件所具有的功能。
【IPC分類】G06F9-44
【公開號】CN104679519
【申請?zhí)枴緾N201510104809
【發(fā)明人】于秀山, 劉然, 于長鉞
【申請人】于秀山
【公開日】2015年6月3日
【申請日】2015年3月10日