我們已經爲我們的WPF應用程序(.NET 4)進行了一些自動UI測試;這些測試使用UI Automation API。WPF UI自動化 - AutomationElement.FindFirst在有很多元素時失敗
我們稱AutomationElement.FindFirst找到一個目標元素,然後與它進行交互。
實施例(僞代碼):
var nameEquals = new PropertyCondition(AutomationElement.NameProperty, "OurAppWindow");
var appWindow = DesktopWindow.FindFirst(TreeScope.Children, nameEquals);
// this succeeds
var idEquals = new PropertyCondition(AutomationElement.AutomationIdProperty, "ControlId");
var someItem = appWindow.FindFirst(TreeScope.Descendants, idEquals);
// this suceeds sometimes, and fails sometimes!
的問題是,所述appWindow.FindFirst
有時會失敗並返回null,即使當元件是存在的。我已經編寫了一個輔助函數,用於手動瀏覽UI自動化樹並將其打印出來,並且在所有情況下都存在具有正確ID的元素。
它似乎與窗口中還顯示了多少其他項目有關。如果沒有其他項目,那麼它總是成功的,但是當許多其他複雜的UI元素與其一起顯示時,則查找失敗。
看起來好像我們正在觸及某種內部元素限制。我找不到任何自動化API提到的任何文檔元素限制 - 是否有解決方法?我想我可能不得不寫我自己的實現FindFirst
這是手動樹手動本身......據我可以告訴這應該工作,因爲我的樹型打印機實用程序功能正是這樣做,並沒有問題,但好像這將是不必要的,緩慢:-(
任何幫助,將不勝感激
因爲有些UI自動化框架的日子,我現在工作,它真的很遺憾我發現有多少錯誤。它是所有級別上的錯誤的全部。微軟做了一個非常草率的工作。但是這些錯誤似乎在框架的服務器端,因爲如果你自動化一個Win32,WPF或.NET Forms應用程序,它會產生很大的不同。根據底層的UI框架,你會得到其他類型的錯誤。此外,許多控件根本不受支持,或者功能非常基礎,您無法自動執行它們。 – Elmue 2016-11-17 03:00:05