我正在尝试为使用 Caliburn.Micro和 White的WPF应用程序编写一些UI自动化测试.我使用CM的内置约定将我的控件绑定到视图模型的属性和方法.我也在使用Conductor类,这样我可以在一个屏幕上看到
我遇到的问题是我将拥有多个具有相同x:Name属性的XAML元素,以便CM可以为我处理所有绑定工作.遗憾的是,这意味着多个UIItem对象将具有相同的UI自动化ID.我发现获得的唯一方法,例如,使用x:Name =“DisplayName”的不同TextBlock元素是进行如下调用:
SearchCriteria criteria = SearchCriteria.ByAutomationId("DisplayName").AndIndex(1); WPFLabel label = myWindow.Get<WPFLabel>(criteria);
这意味着我的测试需要知道屏幕上放置不同控件的确切顺序,这看起来非常脆弱.通过添加另一个视图模型,我可以看到我的测试全部破坏.
>除了使用x:Name属性之外,有没有办法指定自动化ID?
>如果我直接使用UI Automation框架而不是使用White,这会更容易吗?
>或者,我是否真的不得不放弃基于CM的约定绑定并给出每个唯一的x:Name值并手动绑定它们?
更新
通过一次看到多个视图来澄清我的意思,这是我的总体布局.我有我的ShellViewModel,它来自Conductor< IScreen> .Collection.OneActive.然后我的视图有一个ItemsControl绑定到shell视图模型的Items属性.每个项目模板都会显示一个按钮,用于将特定的IScreen加载到shell视图中的ContentControl中.因此,如果我尝试使用x:Name =“DisplayName”查找元素,我在shell视图上有标签,ItemsControl中按钮上的标签以及ContentControl内部的标签.
虽然AutomationId默认来自x:Name属性,但您可以通过设置 AutomationProperties.AutomationId来覆盖它.