我正在嘗試爲使用Caliburn.Micro和White的WPF應用程序編寫一些UI自動化測試。我使用CM的內置約定將我的控件綁定到視圖模型的屬性和方法。我也使用Conductor
類,以便我可以在單個屏幕上顯示多個視圖。這通常意味着屏幕上的多個控件最終可能具有相同的x:Name
值。它會被綁定到不同的視圖模型。我想要做的一個好主意可以在HelloScreens sample application that comes with CM中看到。使用Caliburn.Micro進行WPF UI自動化?
我正在運行的問題是,我將擁有多個具有相同x:Name
屬性的XAML元素,以便CM可以處理我的所有綁定工作。這不幸意味着多個UIItem
對象將具有相同的UI自動化ID。我發現得到的,例如,唯一的方法,不同的TextBlock
元素與x:Name="DisplayName"
是撥打電話,如以下幾點:
SearchCriteria criteria = SearchCriteria.ByAutomationId("DisplayName").AndIndex(1);
WPFLabel label = myWindow.Get<WPFLabel>(criteria);
這意味着我的測試需要知道確切的順序是不同的控件放置在屏幕顯得非常脆弱。通過添加另一個視圖模型,我可以看到我的測試全部打破。
- 是否有一種方法可以指定自動化ID,而不是使用
x:Name
屬性? - 如果我直接使用UI自動化框架而不是使用White,這會更容易嗎?
- 或者,我是否真的必須放棄CM的基於約定的綁定,並賦予每個唯一的
x:Name
值並手動綁定它們?
修訂
爲了澄清我的意思有一次多個視圖可見,這裏是我的總體佈局。我有我的ShellViewModel
,我從Conductor<IScreen>.Collection.OneActive
得到。然後我的視圖有一個ItemsControl
,它綁定到shell視圖模型的Items
屬性。每個項目模板都顯示一個按鈕,用於將特定的IScreen
加載到殼體視圖上的ContentControl
中。所以,如果我嘗試尋找x:Name="DisplayName"
的元素,我在shell視圖上有標籤,ItemsControl
中的按鈕上的標籤以及ContentControl
中的標籤。
當你說你在一個屏幕上有多個視圖可見時,你使用的導體類型是什麼?導體或導體。收集。所有活動等? –
devdigital
2011-04-03 16:48:05
我已更新帖子以澄清我的確切設置。讓我知道你是否需要更多信息。 – 2011-04-03 22:32:35