2011-10-18 46 views
0

我有一個程序,我正在測試它的關閉按鈕在一個點上啓用並在另一個點上禁用。 UISpy顯示「的IsEnabled」在這兩個點是「真實」 UIAVerify顯示「的IsEnabled」第一點是「真」,並在第二個是「假」UISpy和UIA驗證在同一個程序上顯示不同的屬性值

後者是我能目視確認通過編程我會得到與UISpy相同的值,並且我的測試用例失敗。

using System.Windows.Automation;

樹結構: 「對話」,「ProgramName中」 「標題欄」,「ProgramName中」 「按鈕」,「關閉」

是任何人都知道什麼可能會造成這個? UIA Verify是否使用與UISpy不同的庫?

+0

UISpy可以緩存樹嗎?它可能會在第一次遇到元素細節時獲取元素細節,並在第二次拾取相同元素時再次顯示相同的信息。檢查是否有「刷新」按鈕或類似的,你可以用它來強制UISpy顯示當前值。 – BrendanMcK

+0

不是,情況並非如此,我自己的自動化根據需要實時獲取信息,而不依賴於緩存信息 - 它仍然與uispy顯示的信息相同。 此外,如果在程序處於'isEnabled'-false狀態後啓動uispy,則uispy仍然會報告它爲真。 –

+0

我有一個C++ MFC應用程序。它具有一些選項卡頁面的選項卡控件。我在win2k3上。 UISpy顯示該控件的自動化ID,但UIAVerify不顯示。我正在使用白色框架,它也無法識別標籤控件,就像UIAVerify一樣。間諜和驗證絕對使用不同的庫! Xeno是否找到了兩個用來查找控件的庫?提前致謝。 – user96403

回答

0

UIA Verify 2.0使用UIA 3.0更新以及Windows 7(也可作爲單獨的Vista和XP SP3的修補程序KB971513提供)中發佈的新的原生COM UIA庫。另一方面,我認爲UISpy使用原始的託管API。

我有與.isEnabled().invoke()方法,我是能夠通過遷移到COM庫,這似乎是更穩定,比託管庫更快的整體糾正託管庫間歇性的問題。

我不記得遷移過程的細節,但基本上你需要生成一個互操作的DLL,它將允許.NET應用程序調用本地UIA方法。然後,您可以選擇創建自己的包裝庫或可能使用下面提到的包裝庫之一。在創建的COM API的包裝早企圖 -

  • UI Automation COM-to-.NET Adapter

    我建議參照這些用於幫助正在過渡。我直接用這個方法遇到了麻煩,但最初看看是有幫助的。還要搜索一些關於由這個包裝器開發人員製作的COM API的MSDN支持論壇帖子。不幸的是,由於我的StackOverflow代表較低(長時間潛伏,第一次回答),因此無法鏈接到它們。

  • UIA Verify Source Code - 您可以看到他們在其源代碼中有一個用於訪問COM接口的UIAComWrapper。您也可以在該項目中瞭解他們如何生成interop DLL。

相關問題