




已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
微軟UI自動(dòng)化測(cè)試的技術(shù)演變(上)s發(fā)布時(shí)間: 2010-1-28 16:07 作者: 熊力 來(lái)源: /stbchina字體: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿 | 每周一問(wèn),答貼有獎(jiǎng) Windows平臺(tái)的桌面開(kāi)發(fā)技術(shù), 從最原始的Win32 SDK,發(fā)展到.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ù)演變,下篇將著重介紹最新的UI Automation(UIA)的內(nèi)部實(shí)現(xiàn)和使用技巧。自動(dòng)測(cè)試是指用一個(gè)程序自動(dòng)地控制另外一個(gè)程序,模擬用戶的操作進(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)。用戶行為模擬用戶行為模擬指模擬用戶的輸入,比如鼠標(biāo)、鍵盤和觸摸筆的操作,中間可能會(huì)涉及IME輸入法、組合鍵、特定用戶習(xí)慣,比如輸入速度的模擬等。測(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多用于專業(yè)領(lǐng)域如游戲和CAD,本文并不討論。無(wú)論是MFC,VCL還是VB6,Win32 SDK都是其根本,最終打交道的其實(shí)都是HWND和Windows Message。實(shí)現(xiàn)上述自動(dòng)化的三個(gè)步驟 無(wú)外乎三件法寶,Win32 API,Windows 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ì)于用戶行為模擬,可以直接通過(guò)SendKey API來(lái)完成,當(dāng)然也可以發(fā)送WM_CHAR或者WM_KEYDOWN通知等等。除此以外,Windows Hook更加豐富了技術(shù)的選取。通過(guò)Windows Hook,測(cè)試人員還可以直接監(jiān)控、 截取、模擬目標(biāo)程序的Windows消息,實(shí)現(xiàn)更靈活的模擬,檢查甚至錄制的功能。Windows Spy+(圖一)雖然不是測(cè)試工具,也算是使用這套技術(shù)的典型例子。通過(guò)Windows Spy+可以定位任意窗口, 讀取窗口屬性,監(jiān)視窗口消息等等。圖一: Microsoft Spy+采用Win32 SDK和Windows Message的優(yōu)點(diǎn)是直接,靈活。由于直接使用Win32 API,沒(méi)有額外的學(xué)習(xí)曲線,遇上問(wèn)題可以直接參考Win32 SDK解決。使用Message Hook使得測(cè)試程序可以靈活實(shí)現(xiàn),直接對(duì)Window Message的操作不僅可以把很多情況化繁為簡(jiǎn),還方便test hook的實(shí)現(xiàn)。(所謂test hook,是指產(chǎn)品中為了方便測(cè)試而專門設(shè)計(jì)的隱藏功能,該功能對(duì)普通用戶不可見(jiàn),只是為了方便測(cè)試。)缺點(diǎn)包括以下三個(gè)方面:使用復(fù)雜,實(shí)現(xiàn)成本高。Win32 AP的使用上有很多需要特別注意的細(xì)節(jié), 比如有的Win32 API不能跨進(jìn)程工作,有的Windows Message只能發(fā)給當(dāng)前線程所創(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,以及后來(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ā)生改變的,這一點(diǎn)對(duì)于依賴HWND作為唯一標(biāo)識(shí)的Win32 API就是一個(gè)致命傷。無(wú)法操作自繪窗口。比如打開(kāi)Excel的工作表,會(huì)發(fā)現(xiàn)表格中的每一個(gè)Cell并沒(méi)有對(duì)應(yīng)到HWND上。Excel的cell都是通過(guò)代碼繪制,而不是依賴于現(xiàn)成的Win32 Control。這就使得Win32 API對(duì)于自繪窗口沒(méi)有用武之地。MSAAMSAA的全稱是Microsoft Active Accessibility。這是類似DCOM技術(shù)。技術(shù)模型是這樣的,UI程序可以暴露出一個(gè)Interface,方便另一個(gè)程序?qū)ζ溥M(jìn)行控制。MSAA技術(shù)的初衷是為了方便殘疾人使用Windows 程序。比如盲人看不到窗口,但是盲人可以通過(guò)一個(gè)USB讀屏器連接到電腦上,讀屏器通過(guò)UI程序暴露出來(lái)的這個(gè)Interface,就可以獲取程序信息,通過(guò)盲文或者其它形式傳遞給盲人。MSAA提供了如此方便的功能, UI自動(dòng)化測(cè)試自然可以借用這項(xiàng)技術(shù)。MSAA暴露出來(lái)的Interface叫做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)部類,然后通過(guò)LresultFromObject API把IAccessible 接口返回給測(cè)試程序。4. 測(cè)試程序拿到IAccessible接口,開(kāi)始調(diào)用IAccessible接口函數(shù)操作測(cè)試目標(biāo)。IAccessible接口里面的幾個(gè)關(guān)鍵函數(shù)是:* IAccessible:get_accChild/ IAccessible:get_accParent通過(guò)這兩個(gè)函數(shù),調(diào)用者可以瀏覽目標(biāo)程序的窗口關(guān)系樹(shù),定位到UI元素。* IAccessible:accLocation/I Accessible:accHitTest讀取和分辨目標(biāo)元素的屏幕位置。* IAccessible:accName/ I Accessible: accSelect讀取元素的名字,對(duì)UI元素進(jìn)行指定的操作,比如選取Listbox里面的某一項(xiàng)等等。* IAccessible:accValue 開(kāi)發(fā)人員可以自定義value屬性的實(shí)現(xiàn)。比如針對(duì)折線圖控件,開(kāi)發(fā)人員可以在accValue中返回折線的坐標(biāo)數(shù)列。MSAA的理念類似于test hook。通過(guò)主動(dòng)讓UI程序暴露一個(gè)接口來(lái)讓調(diào)用者控制。在具體使用中,測(cè)試人員往往是結(jié)合MSAA和Win32 API操作,取長(zhǎng)補(bǔ)短。一方面對(duì)于UI元素豐富的屬性,比如style,鉤選狀態(tài),是否最大化和模擬用戶輸入等,繼續(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ì)于自繪窗口,雖然說(shuō)只有一個(gè)HWND,但是開(kāi)發(fā)人員可以通過(guò)實(shí)現(xiàn)IAccessible接口來(lái)實(shí)現(xiàn)邏輯上的層次關(guān)系。比如 Excel中就可以通過(guò)IAccessible把多個(gè)cell的子IAccessible接口暴露給調(diào)用者。IAccessible的實(shí)現(xiàn)是由開(kāi)發(fā)者提供,開(kāi)發(fā)者可以靈活地根據(jù)實(shí)際情況決定方法的實(shí)現(xiàn)。比如前面提到了折線圖控件可以返回坐標(biāo)數(shù)列。對(duì)于.NET WinForm,微軟在Framework中就提供了IAccessible的默認(rèn)實(shí)現(xiàn),這樣在具體實(shí)現(xiàn)中,就可以處理.NET動(dòng)態(tài)維護(hù)HWND的細(xì)節(jié)等等針對(duì)MSAA的工具也有很多,比如AccExplorer(圖二)可以像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 2005對(duì)于測(cè)試程序如何直接獲取并使用IAccessible接口,并非本系列重點(diǎn),所以并不提供更多介紹。在后面的文章中, 會(huì)介紹如何隱含使用IAccessible和MSAA。MSAA也有自身的缺點(diǎn):1. 雖然說(shuō)MSAA基于COM技術(shù), 但I(xiàn)Accessible并不是一個(gè)COM標(biāo)準(zhǔn)接口。 比如使用者不需要調(diào)用CoInitialize即可使用,也無(wú)法通過(guò)QueryInterface進(jìn)一步獲取更多的自定義接口。這局限了MSAA所能提供的功能。2. IAccessible接口的定義有缺陷。里面不少方法是可有可無(wú)的,但是又缺少一些支持UI自動(dòng)化的關(guān)鍵方法。 比如它提供了accSelect支持控件的選取,但是卻沒(mé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)稱UIA。在最新的Windows SDK中,UIA和MSAA等其它支持UI自動(dòng)化技術(shù)的組件放在一起發(fā)布,叫做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ú)立的模型,體貼的開(kāi)發(fā)接口,用來(lái)專門解決某一類的問(wèn)題,同時(shí)允許不同的實(shí)現(xiàn)細(xì)節(jié)。UIA可以被看作“技術(shù)”,是因?yàn)椋篣IA定義了全新的、針對(duì)UI自動(dòng)化的接口和模式。分別是支持對(duì)UI元素進(jìn)行遍歷和條件化查詢的TreeWalker/FindAll。定義了讀寫(xiě)UI元素屬性的UIA 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ì)出發(fā)點(diǎn)并不是為解決UI自動(dòng)化。Win32旨在提供的通用開(kāi)發(fā)接口, MSAA旨在提供程序的多種訪問(wèn)方式。相反,UIA的設(shè)計(jì)目的,以及新引入的模式和接口都完全是針對(duì)UI自動(dòng)化測(cè)試的。在后面的文章中我們會(huì)詳細(xì)分析UIA的內(nèi)部實(shí)現(xiàn)。可以看到,UIA這一套接口和模式,可以在不同平臺(tái),不同開(kāi)發(fā)工具中實(shí)現(xiàn)和使用。其內(nèi)部實(shí)現(xiàn)方式也因地制宜, 前后的兼容性都照顧得很好。 同時(shí),UIA提供了托管的和非托管兩種API,這些都是Win32和MSAA無(wú)法比擬的。下面一段簡(jiǎn)單的C#代碼演示了如何使用UIA測(cè)試Windows自帶計(jì)算器完成計(jì)算3+5-2的操作(下述代碼可能需要修改以適應(yīng)不同Windows版本的calc.exe程序。本代碼使用Visual Studio 2008針對(duì)Windows 2008 Server R2 English 編寫(xiě))。UIAutomation和WPFUIAutomation是微軟從Windows Vista開(kāi)始推出的一套全新UI自動(dòng)化測(cè)試技術(shù),簡(jiǎn)稱UIA。在最新的Windows SDK中,UIA和MSAA等其它支持UI自動(dòng)化技術(shù)的組件放在一起發(fā)布,叫做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ú)立的模型,體貼的開(kāi)發(fā)接口,用來(lái)專門解決某一類的問(wèn)題,同時(shí)允許不同的實(shí)現(xiàn)細(xì)節(jié)。UIA可以被看作“技術(shù)”,是因?yàn)椋篣IA定義了全新的、針對(duì)UI自動(dòng)化的接口和模式。分別是支持對(duì)UI元素進(jìn)行遍歷和條件化查詢的TreeWalker/FindAll。定義了讀寫(xiě)UI元素屬性的UIA 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ì)出發(fā)點(diǎn)并不是為解決UI自動(dòng)化。Win32旨在提供的通用開(kāi)發(fā)接口, MSAA旨在提供程序的多種訪問(wèn)方式。相反,UIA的設(shè)計(jì)目的,以及新引入的模式和接口都完全是針對(duì)UI自動(dòng)化測(cè)試的。在后面的文章中我們會(huì)詳細(xì)分析UIA的內(nèi)部實(shí)現(xiàn)。可以看到,UIA這一套接口和模式,可以在不同平臺(tái),不同開(kāi)發(fā)工具中實(shí)現(xiàn)和使用。其內(nèi)部實(shí)現(xiàn)方式也因地制宜, 前后的兼容性都照顧得很好。 同時(shí),UIA提供了托管的和非托管兩種API,這些都是Win32和MSAA無(wú)法比擬的。下面一段簡(jiǎn)單的C#代碼演示了如何使用UIA測(cè)試Windows自帶計(jì)算器完成計(jì)算3+5-2的操作(下述代碼可能需要修改以適應(yīng)不同Windows版本的calc.exe程序。本代碼使用Visual Studio 2008針對(duì)Windows 2008 Server R2 English 編寫(xiě))。UIA的優(yōu)勢(shì)UIA的優(yōu)勢(shì)非常明顯,主要包括以下幾點(diǎn):1. 適應(yīng)不同類型的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ì)詳細(xì)討論。 UIA通過(guò)一項(xiàng)叫做UIAMSAA的橋技術(shù), 針對(duì)傳統(tǒng)程序,可以在內(nèi)部實(shí)現(xiàn)中借用MSAA的接口和直接調(diào)用Win32 API。這樣不需要對(duì)控件或者程序的既有實(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)鍵盤操作,要么發(fā)送Windows Message,而Message還分為WM_COMMAND或者WM_BUTTONDOWN。 而通過(guò)UIA Pattern,統(tǒng)一歸類于Invoke接口,這個(gè)接口對(duì)于測(cè)試者來(lái)說(shuō)就統(tǒng)一了。無(wú)論是Win32、 WPF還是Silverlight按鈕,都可以通過(guò)統(tǒng)一接口執(zhí)行,從而把具體實(shí)現(xiàn)隔離開(kāi)。同時(shí), 調(diào)用者若希望繼續(xù)沿用鍵盤鼠標(biāo)模擬,仍舊可以通過(guò)SendKey加上UIA獲取坐標(biāo)的方法實(shí)現(xiàn)。而UIA Event和對(duì)UI元素支持條件化區(qū)域化搜索,更是極大簡(jiǎn)化了測(cè)試人員的工作。4. 提供托管的和非托管接口, 方便各種工具的開(kāi)發(fā)人員。同時(shí)提供了簡(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ì)詳細(xì)介紹。5. 針對(duì)WPF程序,除了支持基本的端對(duì)端(End to End)UI自動(dòng)化以外,還支持基于AutomationPeer的單元測(cè)試。具體例子可以參考UI Automation in Silverlight - Simulating User Interactions6. 提供了完善的工具、文檔、開(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ì)于稍復(fù)雜的UI 程序,測(cè)試程序往往需要根據(jù)測(cè)試目標(biāo)的狀態(tài)決定 下一步的操作。比如測(cè)試文件另存為功能的時(shí)候,若保存路徑是網(wǎng)絡(luò)路徑,可能會(huì)因?yàn)榫W(wǎng)絡(luò)延遲導(dǎo)致整個(gè)UI停頓比較長(zhǎng)的時(shí)間。這個(gè)時(shí)候測(cè)試,程序如果不顧當(dāng)前狀態(tài)而簡(jiǎn)單地執(zhí)行下一步操作,比如新建文件, 很可能會(huì)因?yàn)閁I延遲而失敗。 正確的做法是,測(cè)試程序應(yīng)該等待文件保存成功返回后,再進(jìn)行下一步操作。這就是自動(dòng)化中同步和等待的一個(gè)例子。實(shí)現(xiàn)同步和等待有多種方法,最簡(jiǎn)單粗暴的做法是硬編碼一個(gè)長(zhǎng)時(shí)間的 Sleep在測(cè)試代碼中。稍微好一點(diǎn)的做法可以采取小時(shí)間片的輪詢狀態(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)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 承包商公司管理制度
- 病區(qū)醫(yī)療組管理制度
- 書(shū)法學(xué)員管理制度
- 服裝erp管理制度
- 物業(yè)小區(qū)保潔管理制度
- 汽車職業(yè)健康管理制度
- 演藝團(tuán)隊(duì)運(yùn)營(yíng)管理制度
- 渦流紡紗設(shè)備管理制度
- 手工制作公司管理制度
- 貴州凱得利管理制度
- 風(fēng)箏的力學(xué)原理
- 愛(ài)是我的眼睛合唱譜
- 中國(guó)缺血性卒中和短暫性腦缺血發(fā)作二級(jí)預(yù)防指南(2022年版)解讀
- 初中化學(xué)實(shí)驗(yàn)教學(xué)進(jìn)度表
- 橋梁病害診斷及維修加固
- 關(guān)稅系統(tǒng)崗位練兵業(yè)務(wù)知識(shí)測(cè)試題庫(kù)(關(guān)稅業(yè)務(wù)知識(shí))(單項(xiàng)選擇題)附答案
- 2023年云南高中數(shù)學(xué)會(huì)考真題
- LY/T 1783.2-2017黑熊繁育利用技術(shù)規(guī)范第2部分:飼養(yǎng)管理
- 《士兵突擊》課件
- 接觸網(wǎng)施工計(jì)算課件
- 標(biāo)本的運(yùn)送流程課件
評(píng)論
0/150
提交評(píng)論