


版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、微軟 ui 自動(dòng)化測(cè)試的技術(shù)演化(上)公布時(shí)間: 20xx-1-28 16:07作者: 熊力來(lái)源: .blogs./stbchina字體: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿 | 每周一問(wèn),答貼有獎(jiǎng)windows 平臺(tái)的桌面開(kāi)發(fā)技術(shù), 從最原始的 win32 sdk,進(jìn)展到.net winform,始終到今日的wpf 和 silverlight, 發(fā)生了翻天覆地的變化,相對(duì)應(yīng)的 ui 自動(dòng)化測(cè)試技術(shù),也隨之演化。微軟 ui 自動(dòng)化技術(shù)揭秘將分兩個(gè)部分介紹 windows 平臺(tái)桌面程序的自動(dòng)化技術(shù)。上篇將介紹從 win32 sdk 至今的 ui 自動(dòng)化技術(shù)演化,下篇將著重介紹
2、最新的 ui automation(uia)的內(nèi)部實(shí)現(xiàn)和使用技巧。自動(dòng)測(cè)試是指用一個(gè)程序自動(dòng)地把握另外一個(gè)程序,模擬用戶(hù)的操作進(jìn)行測(cè)試。通常自動(dòng)化測(cè)試涉及到下面三個(gè)步驟:測(cè)試源偵測(cè)測(cè)試源偵測(cè)是定位測(cè)試目標(biāo)元素的過(guò)程。比如要測(cè)試 windows 附件中的計(jì)算器,首先要把計(jì)算器窗口和其他程序比如寫(xiě)字板區(qū)分開(kāi)。進(jìn)一步測(cè)試計(jì)算器窗口菜單的時(shí)候,需要首先定位菜單條的位置,獵取其次層子菜單等等。簡(jiǎn)潔地說(shuō),自動(dòng)化測(cè)試首先要能夠獵取從桌面開(kāi)頭的整個(gè) ui 樹(shù)結(jié)構(gòu),定位到特定測(cè)試目標(biāo)。用戶(hù)行為模擬用戶(hù)行為模擬指模擬用戶(hù)的輸入,比如鼠標(biāo)、鍵盤(pán)和觸摸筆的操作,中間可能會(huì)涉及ime 輸入法、組合鍵、特定用戶(hù)習(xí)慣,比如
3、輸入速度的模擬等。測(cè)試目標(biāo)檢查指獵取測(cè)試元素的屬性,比如讀取窗口標(biāo)題, listbox 的子元素, checkbox 的狀態(tài)等等,以便進(jìn)行測(cè)試檢查。win32 sdk 和 windows message在.net 問(wèn)世以前,windows 平臺(tái)上的 ui 程序無(wú)外乎兩種技術(shù):win32 windows sdk 或者 directx。由于 directx 多用于專(zhuān)業(yè)領(lǐng)域如玩耍和cad,本文并不爭(zhēng)辯。無(wú)論是 mfc,vcl 還是 vb6,win32 sdk 都是其根本,最終打交道的其實(shí)都是 hwnd 和windows message。實(shí)現(xiàn)上述自動(dòng)化的三個(gè)步驟 無(wú)外乎三件法寶,win32 api,w
4、indows message 和windows hook。測(cè)試程序首先通過(guò) findwindowex 和 enumwindow 遍歷窗口和子窗口,找到測(cè)試元素比如某個(gè)按鈕,然后可以通過(guò)windows message 或者api 檢查測(cè)試目標(biāo)。比如通過(guò) wm_gettext 或者 getwindowtext 讀取窗口標(biāo)題,通過(guò) getwindowrect 讀取按鈕坐標(biāo)位置等等。對(duì)于用戶(hù)行為模擬,可以直接通過(guò) sendkey api 來(lái)完成,固然也可以發(fā)送 wm_char 或者wm_keydown 通知等等。除此以外,windows hook 更加豐富了技術(shù)的選取。通過(guò) windows hook,
5、測(cè)試人員還可以直接監(jiān)控、 截取、模擬目標(biāo)程序的 windows 消息, 實(shí)現(xiàn)更機(jī)敏的模擬,檢查甚至錄制的功能。windows spy+(圖一)雖然不是測(cè)試工具,也算是使用這套技術(shù)的典型例子。通過(guò)windows spy+可以定位任意窗口, 讀取窗口屬性,監(jiān)視窗口消息等等。圖一: microsoft spy+接受win32 sdk 和windows message 的優(yōu)點(diǎn)是直接,機(jī)敏。由于直接使用 win32 api,沒(méi)有額外的學(xué)習(xí)曲線(xiàn),遇上問(wèn)題可以直接參考 win32 sdk解決。使用 message hook 使得測(cè)試程序可以機(jī)敏實(shí)現(xiàn),直接對(duì) window message 的操作不僅可以把很多
6、狀況化繁為簡(jiǎn),還便利 test hook 的實(shí)現(xiàn)。(所謂 test hook,是指產(chǎn)品中為了便利測(cè)試而特地設(shè)計(jì)的隱蔽功能,該功能對(duì)一般用戶(hù)不行見(jiàn),只是為了便利測(cè)試。)缺點(diǎn)包括以下三個(gè)方面:使用簡(jiǎn)單,實(shí)現(xiàn)成本高。win32 ap 的使用上有很多需要特別留意的細(xì)節(jié), 比如有的 win32 api 不能跨進(jìn)程工作,有的windows message只能發(fā)給當(dāng)前線(xiàn)程所創(chuàng)建的窗口,稍有不慎,就導(dǎo)致測(cè)試程序不穩(wěn)定。過(guò)于底層,不便使用。為了便利測(cè)試用例調(diào)用,需要對(duì)api 進(jìn)行封裝,增加了實(shí)現(xiàn)成本。同時(shí) win32 api 的也使得很多 vb 程序員不便調(diào)用。再者, 不同的開(kāi)發(fā)工具,比如 mfc, vcl,以
7、及后來(lái)的.net framework,在內(nèi)部實(shí)現(xiàn)上對(duì) win32 api 有很多細(xì)節(jié)的處理, 要實(shí)現(xiàn)出針對(duì)各種狀況都通用的測(cè)試框架,并非易事。比如, .net 中的winform control 對(duì)win32 hwnd 的維護(hù)是動(dòng)態(tài)的,同一個(gè)winform control 的 hwnd 在程序的生命周期內(nèi)是可能發(fā)生轉(zhuǎn)變的,這一點(diǎn)對(duì)于依靠 hwnd 作為唯一標(biāo)識(shí)的win32 api 就是一個(gè)致命傷。無(wú)法操作自繪窗口。比如打開(kāi) excel 的工作表,會(huì)發(fā)覺(jué)表格中的每一個(gè) cell 并沒(méi)有對(duì)應(yīng)到hwnd 上。excel 的 cell 都是通過(guò)代碼繪制,而不是依靠于現(xiàn)成的win32 control。這
8、就使得 win32 api 對(duì)于自繪窗口沒(méi)有用武之地。msaamsaa 的全稱(chēng)是 microsoft active accessibility。這是類(lèi)似 d 技術(shù)。技術(shù)模型是這樣的,ui 程序可以暴露出一個(gè) interface,便利另一個(gè)程序?qū)ζ溥M(jìn)行把握。msaa 技術(shù)的初衷是為了便利殘疾人使用 windows 程序。比如盲人看不到窗口,但是盲人可以通過(guò)一個(gè) usb 讀屏器連接到電腦上, 讀屏器通過(guò) ui 程序暴露出來(lái)的這個(gè) interface,就可以獵取程序信息,通過(guò)盲文或者其它形式傳遞給盲人。msaa 供應(yīng)了如此便利的功能, ui 自動(dòng)化測(cè)試自然可以借用這項(xiàng)技術(shù)。msaa 暴露出來(lái)的 in
9、terface 叫做 iaccessible。測(cè)試程序和目標(biāo)ui 程序互操作流程如下:1. 測(cè)試程序調(diào)用windows api: accessibleobjectfromwindow,傳入目標(biāo) ui 程序 hwnd。2. accessibleobjectfromwindow 函數(shù)向ui 程序發(fā)送wm_getobject 消息。3. ui 程序創(chuàng)建實(shí)現(xiàn)了 iaccessible 的內(nèi)部類(lèi),然后通過(guò)lresultfromobject api 把 iaccessible 接口返回給測(cè)試程序。4. 測(cè)試程序拿到 iaccessible 接口,開(kāi)頭調(diào)用iaccessible 接口函數(shù)操作測(cè)試目標(biāo)。iac
10、cessible 接口里面的幾個(gè)關(guān)鍵函數(shù)是:* iaccessible:get_accchild/ iaccessible:get_accparent 通過(guò)這兩個(gè)函數(shù),調(diào)用者可以?huà)呙槟繕?biāo)程序的窗口關(guān)系樹(shù),定位到 ui 元素。* iaccessible:acclocation/i accessible:acchittest 讀取和辨別目標(biāo)元素的屏幕位置。* iaccessible:acame/ i accessible: accselect 讀取元素的名字,對(duì) ui 元素進(jìn)行指定的操作,比如選取 listbox 里面的某一項(xiàng)等等。* iaccessible:accvalue 開(kāi)發(fā)人員可以自定義
11、value 屬性的實(shí)現(xiàn)。比如針對(duì)折線(xiàn)圖控件,開(kāi)發(fā)人員可以在 accvalue 中返回折線(xiàn)的坐標(biāo)數(shù)列。msaa 的理念類(lèi)似于 test hook。通過(guò)主動(dòng)讓ui 程序暴露一個(gè)接口來(lái)讓調(diào)用者把握。在具體使用中,測(cè)試人員往往是結(jié)合msaa 和win32 api 操作,取長(zhǎng)補(bǔ)短。一方面對(duì)于 ui 元素豐富的屬性,比如 style,鉤選狀態(tài),是否最大化和模擬用戶(hù)輸入等,連續(xù)接受 win32 api。另一方面用 msaa 的優(yōu)勢(shì)來(lái)彌補(bǔ)win32 api 的一些不足,比如:由于msaa 有自己的get_accchild 方法,使其控件樹(shù)關(guān)系并不肯定要和win32 hwndd 關(guān)系對(duì)應(yīng)全都。對(duì)于自繪窗口,雖然
12、說(shuō)只有一個(gè)hwnd, 但是開(kāi)發(fā)人員可以通過(guò)實(shí)現(xiàn) iaccessible 接口來(lái)實(shí)現(xiàn)規(guī)律上的層次關(guān)系。比如 excel 中就可以通過(guò) iaccessible 把多個(gè) cell 的子iaccessible 接口暴露給調(diào)用者。iaccessible 的實(shí)現(xiàn)是由開(kāi)發(fā)者供應(yīng),開(kāi)發(fā)者可以機(jī)敏地依據(jù)實(shí)際狀況打算方法的實(shí)現(xiàn)。比如前面提到了折線(xiàn)圖控件可以返回坐標(biāo)數(shù)列。對(duì)于.net winform,微軟在 framework 中就供應(yīng)了 iaccessible 的默認(rèn)實(shí)現(xiàn),這樣在具體實(shí)現(xiàn)中,就可以處理.net 動(dòng)態(tài)維護(hù) hwnd 的細(xì)節(jié)等等針對(duì) msaa 的工具也有很多,比如 accexplorer(圖二)可以像
13、 spy+一樣對(duì)指定程序進(jìn)行控件的樹(shù)形掃瞄,檢查 msaa 屬性等。圖二: accexplorer假如您是開(kāi)發(fā)人員, 對(duì)于 unmanaged ui 程序的 msaa 實(shí)現(xiàn),參考 msdn 中關(guān)于 wm_getobject 的說(shuō)明返回 iaccessible interface 就可以了。對(duì)于 managed 程序, 實(shí)現(xiàn)方法更簡(jiǎn)潔, 現(xiàn)成的例子可以參考:* control.:.controlaccessibleobject class* how to create accessible controls by using visual basic .net or visual basic 2
14、0xx對(duì)于測(cè)試程序如何直接獵取并使用 iaccessible 接口,并非本系列重點(diǎn),所以并不供應(yīng)更多介紹。在后面的文章中, 會(huì)介紹如何隱含使用iaccessible 和 msaa。msaa 也有自身的缺點(diǎn):1. 雖然說(shuō) msaa 基于技術(shù), 但 iaccessible 并不是一個(gè)標(biāo)準(zhǔn)接口。 比如使用者不需要調(diào)用 coinitialize 即可使用,也無(wú)法通過(guò) queryinterface進(jìn)一步獵取更多的自定義接口。這局限了 msaa 所能供應(yīng)的功能。2. iaccessible 接口的定義有缺陷。里面不少方法是可有可無(wú)的,但是又缺少一些支持ui 自動(dòng)化的關(guān)鍵方法。 比如它供應(yīng)了 accsele
15、ct 支持控件的選取,但是卻沒(méi)有類(lèi)似 accexpand 這樣的方法支持樹(shù)狀控件的開(kāi)放等。關(guān)于 msaa 和 ui 自動(dòng)化的更多淵源,msaa 設(shè)計(jì)理念,現(xiàn)狀和缺陷,可以參考微軟早期的一篇名為 what is ui automation 的文章。uiautomation 和 wpfuiautomation 是微軟從 windows vista 開(kāi)頭推出的一套全新 ui 自動(dòng)化測(cè)試技術(shù),簡(jiǎn)稱(chēng) uia。在最新的windows sdk 中,uia 和 msaa 等其它支持 ui 自動(dòng)化技術(shù)的組件放在一起公布,叫做 windows automation api。和前面的介紹相比,我傾向于認(rèn)為 uia
16、是一項(xiàng)自動(dòng)化測(cè)試“技術(shù)”,而 msaa 和win32 api 只是實(shí)現(xiàn)自動(dòng)化測(cè)試的兩種“方法”。這里區(qū)分“技術(shù)” 和 “方法”的緣由是,一項(xiàng)“技術(shù)”往往有獨(dú)立的模型,愛(ài)護(hù)的開(kāi)發(fā)接口,用來(lái)特地解決某一類(lèi)的問(wèn)題,同時(shí)允許不同的實(shí)現(xiàn)細(xì)節(jié)。uia 可以被看作“技術(shù)”,是由于:uia 定義了全新的、針對(duì)ui 自動(dòng)化的接口和模式。分別是支持對(duì)ui 元素進(jìn)行遍歷和條件化查詢(xún)的 treewalker/findall。定義了讀寫(xiě)ui 元素屬性的 uia property,包括 name、 id、type、classname、location、 visibility 等等。定義了 ui 元素行為的 uia pat
17、tern,比如 select、expand、resize、 check、value 等等。 還引入了 uia event 接口,可以讓測(cè)試程序在某些大事發(fā)生后得到通知,比如新窗口打開(kāi)大事等。以往的win32 和 msaa 設(shè)計(jì)動(dòng)身點(diǎn)并不是為解決 ui 自動(dòng)化。win32 旨在供應(yīng)的通用開(kāi)發(fā)接口, msaa 旨在供應(yīng)程序的多種訪問(wèn)方式。相反,uia 的設(shè)計(jì)目的,以及新引入的模式和接口都完全是針對(duì) ui 自動(dòng)化測(cè)試的。在后面的文章中我們會(huì)具體分析 uia 的內(nèi)部實(shí)現(xiàn)。可以看到,uia 這一套接口和模式,可以在不同平臺(tái),不同開(kāi)發(fā)工具中實(shí)現(xiàn)和使用。其內(nèi)部實(shí)現(xiàn)方式也因地制宜, 前后的兼容性都照看得很好。
18、 同時(shí),uia 供應(yīng)了托管的和非托管兩種 api,這些都是win32 和 msaa 無(wú)法比擬的。下面一段簡(jiǎn)潔的 c#代碼演示了如何使用 uia 測(cè)試windows 自帶計(jì)算器完成計(jì)算 3+5-2 的操作(下述代碼可能需要修改以適應(yīng)不同 windows版本的 calc.exe 程序。本代碼使用 visual studio 20xx 針對(duì)windows 20xx server r2 english 編寫(xiě))。uiautomation 和 wpfuiautomation 是微軟從 windows vista 開(kāi)頭推出的一套全新 ui 自動(dòng)化測(cè)試技術(shù),簡(jiǎn)稱(chēng) uia。在最新的windows sdk 中,u
19、ia 和 msaa 等其它支持 ui 自動(dòng)化技術(shù)的組件放在一起公布,叫做 windows automation api。和前面的介紹相比,我傾向于認(rèn)為 uia 是一項(xiàng)自動(dòng)化測(cè)試“技術(shù)”,而 msaa 和win32 api 只是實(shí)現(xiàn)自動(dòng)化測(cè)試的兩種“方法”。這里區(qū)分“技術(shù)” 和 “方法”的緣由是,一項(xiàng)“技術(shù)”往往有獨(dú)立的模型,愛(ài)護(hù)的開(kāi)發(fā)接口,用來(lái)特地解決某一類(lèi)的問(wèn)題,同時(shí)允許不同的實(shí)現(xiàn)細(xì)節(jié)。uia 可以被看作“技術(shù)”,是由于:uia 定義了全新的、針對(duì)ui 自動(dòng)化的接口和模式。分別是支持對(duì)ui 元素進(jìn)行遍歷和條件化查詢(xún)的 treewalker/findall。定義了讀寫(xiě)ui 元素屬性的 uia
20、property,包括 name、 id、type、classname、location、 visibility 等等。定義了 ui 元素行為的 uia pattern,比如 select、expand、resize、 check、value 等等。 還引入了 uia event 接口,可以讓測(cè)試程序在某些大事發(fā)生后得到通知,比如新窗口打開(kāi)大事等。以往的win32 和 msaa 設(shè)計(jì)動(dòng)身點(diǎn)并不是為解決 ui 自動(dòng)化。win32 旨在供應(yīng)的通用開(kāi)發(fā)接口, msaa 旨在供應(yīng)程序的多種訪問(wèn)方式。相反,uia 的設(shè)計(jì)目的,以及新引入的模式和接口都完全是針對(duì) ui 自動(dòng)化測(cè)試的。在后面的文章中我們會(huì)具
21、體分析 uia 的內(nèi)部實(shí)現(xiàn)。可以看到,uia 這一套接口和模式,可以在不同平臺(tái),不同開(kāi)發(fā)工具中實(shí)現(xiàn)和使用。其內(nèi)部實(shí)現(xiàn)方式也因地制宜, 前后的兼容性都照看得很好。 同時(shí),uia 供應(yīng)了托管的和非托管兩種 api,這些都是win32 和 msaa 無(wú)法比擬的。下面一段簡(jiǎn)潔的 c#代碼演示了如何使用 uia 測(cè)試windows 自帶計(jì)算器完成計(jì)算 3+5-2 的操作(下述代碼可能需要修改以適應(yīng)不同 windows版本的 calc.exe 程序。本代碼使用 visual studio 20xx 針對(duì)windows 20xx server r2 english 編寫(xiě))。uia 的優(yōu)勢(shì)uia 的優(yōu)勢(shì)格外明
22、顯,主要包括以下幾點(diǎn):1. 適應(yīng)不同類(lèi)型的 ui 程序,包括 win32、winform、 wpf 和 silverlight。由于 wpf 和 silverlight 中的子窗口和控件并不是傳統(tǒng)的 hwnd, 所以win32 api 和 msaa 無(wú)能為力。而 uia 可以直接支持這兩種程序。2. 兼容傳統(tǒng)的win32 和 msaa 模式。 前面提到過(guò),uia 技術(shù)的內(nèi)部實(shí)現(xiàn)可以多樣化。這一點(diǎn)在下一篇文章中會(huì)具體爭(zhēng)辯。 uia 通過(guò)一項(xiàng)叫做 uia<->msaa 的橋技術(shù), 針對(duì)傳統(tǒng)程序,可以在內(nèi)部實(shí)現(xiàn)中借用 msaa 的接口和直接調(diào)用 win32 api。這樣不需要對(duì)控件或者程
23、序的既有實(shí)現(xiàn)做任何改動(dòng),就可以直接適用于 uia 的新模式。3. 新引入的 treewalker、uia event、pattern、 property 模式易于使用,貼合自動(dòng)化測(cè)試。這些模式高度抽象了各種ui 自動(dòng)化測(cè)試的需求, 同時(shí)又不和傳統(tǒng)模式相沖突。比如執(zhí)行點(diǎn)擊按鈕操作,傳統(tǒng)方法要么模擬鼠標(biāo)鍵盤(pán)操作,要么發(fā)送 windows message,而 message 還分為wm_mand 或者wm_buttondown。而通過(guò) uia pattern,統(tǒng)一歸類(lèi)于 invoke 接口,這個(gè)接口對(duì)于測(cè)試者來(lái)說(shuō)就統(tǒng)一了。無(wú)論是 win32、wpf 還是 silverlight 按鈕,都可以通過(guò)統(tǒng)一
24、接口執(zhí)行,從而把具體實(shí)現(xiàn)隔離開(kāi)。同時(shí), 調(diào)用者若期望連續(xù)沿用鍵盤(pán)鼠標(biāo)模擬,照舊可以通過(guò) sendkey 加上 uia 獵取坐標(biāo)的方法實(shí)現(xiàn)。而 uia event 和對(duì) ui 元素支持條件化區(qū)域化搜尋,更是極大簡(jiǎn)化了測(cè)試人員的工作。4. 供應(yīng)托管的和非托管接口, 便利各種工具的開(kāi)發(fā)人員。同時(shí)供應(yīng)了簡(jiǎn)潔便利的方式支持 ui 程序和控件開(kāi)發(fā)人員擴(kuò)展,自定義 uia 的實(shí)現(xiàn)。比如通過(guò) automationpeer 來(lái)擴(kuò)展 基于wpf 的控件,通過(guò)實(shí)現(xiàn)簡(jiǎn)潔的 irawelementprovidersimple 來(lái)擴(kuò)展基于winform 的控件等。具體細(xì)節(jié)在下一篇文章中會(huì)具體介紹。5. 針對(duì)wpf 程序,
25、除了支持基本的端對(duì)端(end to end)ui 自動(dòng)化以外,還支持基于 automationpeer 的單元測(cè)試。具體例子可以參考 ui automation in silverlight - simulating user interactions6. 供應(yīng)了完善的工具、文檔、開(kāi)發(fā)包、例子程序等。比如通過(guò) ui spy(圖三)獵取任意窗口或者元素的 uia 信息。圖三:ui spy自動(dòng)化技術(shù)和自動(dòng)化框架前面提到了 uia 作為全新 ui 自動(dòng)化測(cè)試技術(shù)的優(yōu)勢(shì),但這并不能解決全部的 ui 自動(dòng)化問(wèn)題。 自動(dòng)化框架正是為了自動(dòng)化技術(shù)沒(méi)有完全解決的問(wèn)題。比如:1. 自動(dòng)化中的同步和等待。 對(duì)于稍
26、簡(jiǎn)單的 ui 程序,測(cè)試程序往往需要依據(jù)測(cè)試目標(biāo)的狀態(tài)打算 下一步的操作。比如測(cè)試文件另存為功能的時(shí)候,若保存路徑是網(wǎng)絡(luò)路徑,可能會(huì)由于網(wǎng)絡(luò)延遲導(dǎo)致整個(gè) ui 停頓比較長(zhǎng)的時(shí)間。這個(gè)時(shí)候測(cè)試,程序假如不顧當(dāng)前狀態(tài)而簡(jiǎn)潔地執(zhí)行下一步操作,比如新建文件, 很可能會(huì)由于 ui 延遲而失敗。 正確的做法是,測(cè)試程序應(yīng)當(dāng)?shù)却募4娉晒Ψ祷睾螅龠M(jìn)行下一步操作。這就是自動(dòng)化中同步和等待的一個(gè)例子。實(shí)現(xiàn)同步和等待有多種方法,最簡(jiǎn)潔粗暴的做法是硬編碼一個(gè)長(zhǎng)時(shí)間的 sleep 在測(cè)試代碼中。略微好一點(diǎn)的做法可以實(shí)行小時(shí)間片的輪詢(xún)狀態(tài)檢查, 或者反復(fù)重試。 借助 uia 的 event pattern,可以嘗試捕獲另存為窗口的關(guān)閉 windowclosedevent。 假如要做得完善一點(diǎn), 可以把多種方法結(jié)合,另外再額外檢查目標(biāo)程序的 cpu 使用狀況,消息循環(huán)是否有回應(yīng),設(shè)定超時(shí)時(shí)間等等。2. 冗繁的編碼過(guò)程。 對(duì)于一個(gè) ui 窗口,里面可能有幾十個(gè)子控件或者子窗口。 在編寫(xiě)測(cè)試代碼的時(shí)候,假如對(duì)這些子元素的獵取,操作不能簡(jiǎn)化, 勢(shì)必導(dǎo)致代碼冗繁,難以維護(hù)。 借助自動(dòng)代碼生成和 orm (object role modeling)等技術(shù), 可以解決這個(gè)問(wèn)題。 比如可以用工具把窗口及其子元素的關(guān)系和搜尋條件都序列化到 xml 文件中,然后接受 orm 技術(shù)即可在
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年 廣州花都城投廣電城市服務(wù)有限公司招聘考試筆試試題附答案
- 2025年 北京市昌平區(qū)司法局人民陪審員選任考試試題附答案
- 2020-2025年中國(guó)水蘇糖行業(yè)投資潛力分析及行業(yè)發(fā)展趨勢(shì)報(bào)告
- 2025年中國(guó)硅芯管行業(yè)發(fā)展監(jiān)測(cè)及投資前景展望報(bào)告
- 2025年中國(guó)訓(xùn)練用羽毛球行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2025年中國(guó)廚房食物垃圾處理器行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 2025年環(huán)保節(jié)能型冷卻塔項(xiàng)目投資分析及可行性報(bào)告
- 中國(guó)典當(dāng)O2O行業(yè)市場(chǎng)調(diào)查研究及投資前景預(yù)測(cè)報(bào)告
- 2025年中國(guó)無(wú)手柄扁噴筒行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 摩托車(chē)護(hù)胸項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- GB/T 4437.1-2023鋁及鋁合金熱擠壓管第1部分:無(wú)縫圓管
- 周轉(zhuǎn)材料管理制度范本
- 工貿(mào)企業(yè)重大事故隱患判定標(biāo)準(zhǔn)-處罰事故案例
- 中藥貼敷課件
- 混凝土電桿組立檢驗(yàn)批質(zhì)量驗(yàn)收記錄表
- 國(guó)家開(kāi)放大學(xué)《土木工程力學(xué)(本)》形考作業(yè)1-5參考答案
- 《線(xiàn)性代數(shù)》課程思政的案例及思考
- plc課程設(shè)計(jì)-病房呼叫系統(tǒng)
- 起重機(jī)改造施工方案
- 驗(yàn)證前風(fēng)險(xiǎn)評(píng)估精密檢驗(yàn)儀器風(fēng)險(xiǎn)評(píng)估報(bào)告
- 檢驗(yàn)科醫(yī)院感染管理質(zhì)量考核標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論