日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

MSAA简介

發布時間:2024/6/21 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 MSAA简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MSAA的全稱是Microsoft Active Accessibility。這是類似DCOM技術。技術模型是這樣的,UI程序可以暴露出一個Interface,方便另一個程序對其進行控制。 MSAA技術的初衷是為了方便殘疾人使用Windows 程序。比如盲人看不到窗口,但是盲人可以通過一個USB讀屏器連接到電腦上, 讀屏器通過UI程序暴露出來的這個Interface,就可以獲取程序信息,通過盲文或者其它形式傳遞給盲人。

MSAA提供了如此方便的功能, UI自動化測試自然可以借用這項技術。MSAA暴露出來的Interface叫做 IAccessible。測試程序和目標UI程序互操作流程如下:

1. 測試程序調用Windows API: AccessibleObjectFromWindow,傳入目標UI程序HWND。

2. AccessibleObjectFromWindow函數向UI程序發送WM_GETOBJECT消息。

3. UI程序創建實現了IAccessible的內部類,然后通過LresultFromObject API把IAccessible 接口返回給測試程序。

4. 測試程序拿到IAccessible接口,開始調用IAccessible接口函數操作測試目標。

IAccessible接口里面的幾個關鍵函數是:

IAccessible::get_accChild/ IAccessible::get_accParent通過這兩個函數,調用者可以瀏覽目標程序的窗口關系樹,定位到UI元素。

IAccessible::accLocation/I Accessible::accHitTest讀取和分辨目標元素的屏幕位置。

IAccessible::accName/ I Accessible:: accSelect讀取元素的名字,對UI元素進行指定的操作,比如選取Listbox里面的某一項等等。

IAccessible::accValue 開發人員可以自定義value屬性的實現。比如針對折線圖控件,開發人員可以在accValue中返回折線的坐標數列。

MSAA的理念 類似于test hook。 通過主動讓UI程序暴露一個接口來讓調用者控制。 在具體使用中,測試人員往往是結合MSAA和Win32 API操作,取長補短。一方面對于UI元素豐富的屬性,比如style,鉤選狀態,是否最大化和模擬用戶輸入等,繼續采用Win32 API。 另一方面用MSAA的優勢來彌補Win32 API的一些不足,比如:

由于MSAA有自己的get_accChild方法,使其控件樹關系并不一定要和Win32 HWNDd關系對應一致。對于自繪窗口,雖然說只有一個HWND, 但是開發人員可以通過實現IAccessible接口來實現邏輯上的層次關系。比如Excel中就可以通過IAccessible把多個cell的子 IAccessible接口暴露給調用者。

IAccessible的實現是由開發者提供, 開發者可以靈活地根據實際情況決定方法的實現。比如前面提到了折線圖控件可以返回坐標數列。對于.NET WinForm, 微軟在Framework中就提供了IAccessible的默認實現,這樣在具體實現中,就可以處理.NET動態維護HWND的細節等

MSAA的全稱是Microsoft Active Accessibility。這是類似DCOM技術。技術模型是這樣的,UI程序可以暴露出一個Interface,方便另一個程序對其進行控制。 MSAA技術的初衷是為了方便殘疾人使用Windows 程序。比如盲人看不到窗口,但是盲人可以通過一個USB讀屏器連接到電腦上, 讀屏器通過UI程序暴露出來的這個Interface,就可以獲取程序信息,通過盲文或者其它形式傳遞給盲人。

MSAA提供了如此方便的功能, UI自動化測試自然可以借用這項技術。MSAA暴露出來的Interface叫做 IAccessible。測試程序和目標UI程序互操作流程如下:

1. 測試程序調用Windows API: AccessibleObjectFromWindow,傳入目標UI程序HWND。

2. AccessibleObjectFromWindow函數向UI程序發送WM_GETOBJECT消息。

3. UI程序創建實現了IAccessible的內部類,然后通過LresultFromObject API把IAccessible 接口返回給測試程序。

4. 測試程序拿到IAccessible接口,開始調用IAccessible接口函數操作測試目標。

IAccessible接口里面的幾個關鍵函數是:

IAccessible::get_accChild/ IAccessible::get_accParent通過這兩個函數,調用者可以瀏覽目標程序的窗口關系樹,定位到UI元素。

IAccessible::accLocation/I Accessible::accHitTest讀取和分辨目標元素的屏幕位置。

IAccessible::accName/ I Accessible:: accSelect讀取元素的名字,對UI元素進行指定的操作,比如選取Listbox里面的某一項等等。

IAccessible::accValue 開發人員可以自定義value屬性的實現。比如針對折線圖控件,開發人員可以在accValue中返回折線的坐標數列。

MSAA的理念 類似于test hook。 通過主動讓UI程序暴露一個接口來讓調用者控制。 在具體使用中,測試人員往往是結合MSAA和Win32 API操作,取長補短。一方面對于UI元素豐富的屬性,比如style,鉤選狀態,是否最大化和模擬用戶輸入等,繼續采用Win32 API。 另一方面用MSAA的優勢來彌補Win32 API的一些不足,比如:

由于MSAA有自己的get_accChild方法,使其控件樹關系并不一定要和Win32 HWNDd關系對應一致。對于自繪窗口,雖然說只有一個HWND, 但是開發人員可以通過實現IAccessible接口來實現邏輯上的層次關系。比如Excel中就可以通過IAccessible把多個cell的子 IAccessible接口暴露給調用者。

IAccessible的實現是由開發者提供, 開發者可以靈活地根據實際情況決定方法的實現。比如前面提到了折線圖控件可以返回坐標數列。對于.NET WinForm, 微軟在Framework中就提供了IAccessible的默認實現,這樣在具體實現中,就可以處理.NET動態維護HWND的細節等

。

MSDN:http://msdn.microsoft.com/en-us/library/dd318466%28VS.85%29.aspx

有空再弄個例子,好好玩一下這個東東。

 


作者:GangWang

出處:http://www.cnblogs.com/GnagWang/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

 

總結

以上是生活随笔為你收集整理的MSAA简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。