概述
UIA框架提供了一種統(tǒng)一的對象模型,使得我們不管使用哪種UI框架編寫出復(fù)雜功能的界面,都很容易訪問控件和做界面自動(dòng)化。
UIA是作為Microsoft Active Accessibility的繼承者開發(fā)的。MAA是一個(gè)現(xiàn)有的框架,旨在提供一種使得控制和應(yīng)用程序易訪問的通用解決方案。MAA并非是為了做自動(dòng)化而生,即使最后由于各種原因它發(fā)展成為了一種自動(dòng)化方案。而UIA除了提供更完善的可訪問性解決方案外,還專門為自動(dòng)化測試提供強(qiáng)大的功能。 例如,MAA中,對外暴露UI信息和收集AT products使用同一個(gè)接口,而UIA將這兩者分離為兩種模型。
UIA能成為如此有用的自動(dòng)化測試工具,其中的provider和client都是比不可少的角色。UIA provides可以理解為被測試的應(yīng)用程序(如EXCEL,WORD以及其他的第三方應(yīng)用或者基于WINDOWS系統(tǒng)開發(fā)的控件)。UIA clients可以理解為我們用去測試應(yīng)用程序的自動(dòng)化腳本或者基于provider開發(fā)的輔助程序(如讀屏軟件)。
UIA之provider
為了使得UI能夠被自動(dòng)化,應(yīng)用程序或者控件的開發(fā)者需要考慮終端用戶使用鼠標(biāo)鍵盤等標(biāo)準(zhǔn)輸入能夠?qū)丶M(jìn)行的操作。
一旦這些關(guān)鍵的動(dòng)作被定義了,就應(yīng)該在這個(gè)控件上實(shí)現(xiàn)對應(yīng)的UIA控件模型(就是說控件模型映射了UI元素的功能和行為)。UIA的控件模型(control patterns)抽象出了常用控件的行為,對用戶隱藏了不同控件的差異性。
如前面提到的,如果沒有UIA提供的統(tǒng)一的模型,開發(fā)者或者測試工具需要了解每一種框架的細(xì)節(jié),以達(dá)到準(zhǔn)確的對外暴露出該框架下控件的屬性和行為(不同框架下實(shí)現(xiàn)的同一類控件對外暴露的屬性可能是不一樣的)。因?yàn)樵趙indows操作系統(tǒng)上,任何時(shí)候都是各種UI框架共存(如win32/winform/wpf),所以在沒有UIA模型之前,測試幾種看起來由類似控件實(shí)現(xiàn)的應(yīng)用程序是一項(xiàng)非常艱巨的任務(wù)(因?yàn)樗麄兪褂玫目蚣芸赡懿煌瑴y試代碼無法復(fù)用,需要各自獨(dú)立維護(hù))。下面示例說明:

UIA provider就是負(fù)責(zé)將各種不同框架的屬性映射為對應(yīng)的UIA的屬性。對用戶來說屏蔽了這種差異性。
UIA之client
錄制回放方式的劣勢
在做UI自動(dòng)化測試時(shí),我們的一個(gè)理想目標(biāo)是測試工具或者測試場景能夠連貫(穩(wěn)定)、可重復(fù)執(zhí)行。我們可以通過對控件操作進(jìn)行錄制回放來實(shí)現(xiàn)。
UI自動(dòng)化測試的一個(gè)難點(diǎn)就是靜態(tài)的測試腳本如何能夠同步操作動(dòng)態(tài)變化的控件。例如,列表框控件(例如Windows任務(wù)管理器中包含的控件),其顯示當(dāng)前運(yùn)行的應(yīng)用程序的列表。因?yàn)槿蝿?wù)管理器列表里面的每一項(xiàng)都是一直動(dòng)態(tài)變化的,所以通過來對某一個(gè)特定區(qū)域來進(jìn)行錄制回放實(shí)現(xiàn)腳本的重復(fù)性是不可行的。
UIA的優(yōu)勢
UIA以程序化訪問的方式來連接自動(dòng)化腳本和被測試應(yīng)用程序,它能夠讓我們通過代碼來模擬鼠標(biāo)和鍵盤等外設(shè)的操作,來與被測試程序進(jìn)行交互。UIA通過抽象出下面5部分,為我們提供程序化訪問。
1、UIA Tree
2、UIA Control Types
3、UIA Properties
4、UIA Control Pattern
5、UIA Events
使用UIA編寫自動(dòng)化測試程序的步驟(C#)
