如何检查XAML元素是否支持AutomationId属性我需要一种方法来检查代码库中的每个WPF控件是否具有AutomationProperties.AutomationId属性。(这是自动化UI测试所必需的。)我还需要确保将来对可能添加到代码库的所有表单强制执行此要求。我考虑了几种不同的方法,但到目前为止,它们似乎都不是正确的方法。选项1:为应用程序中的每个WPF窗体编写单元测试。这是一个相当简单的方法。我编写了一个方法来检查DependencyControl的所有逻辑后代并确保每个后代都有一个AutomationId。这是一些C#:privateboolAllControlsHaveAutomationId(DependencyObjectcontrol){boolresult=true;if(this.ControlHasAutomationId(control)){foreach(objectoinLogicalTreeHelper.GetChildren(control)){FrameworkElementframeworkElement=oasFrameworkElement;如果(frameworkElement!=null){结果=this.AllControlsHaveAutomationId(frameworkElement);}}}else{结果=false;}返回结果;}privateboolControlHasAutomationId(DependencyObjectcontrol){return!string.);这种方法的问题是我假设其他开发人员会为他们的表单编写单元测试,这不是一个好的假设。如果我不能假设AutomationIds将添加到所有WPF控件,那么我也不能假设将编写单元测试。选项2:使用System.Xml.XmlDocument读取每个XAML文件。检查文档中的AutomationProperties.AutomationId元素。这种方法似乎很有前途我最初的计划是将每个XAML文件加载到XmlDocument中并检查文档中每个元素的AutomationProperties.AutomationId属性。但是,我意识到并非XAML中的每个元素类型都支持AutomationProperties.AutomationId属性。我需要的是一种读取XAML文件中的元素并确定该元素是否支持AutomationProperties.AutomationId属性的方法。有没有办法做到这一点?您可以在代码库的所有程序集中查看BAML(编译的XAML)...。有多种方法可以做到这一点。通过.NETReflector和AddIn查看BAML一种方法是编写Reflector插件。您可以将其基于已经可用的BAML查看器。然后希望这只是一个给反射器你的组件并说一些没有找到自动化ID的情况。通过StylesExplorer查看BAML允许您使用BamlAssembly类访问程序BamlAssembly的BAML。通过LocBAML查看BAML此工具的源代码在WindowsSDK中可用。您可以修改以查找自动化属性而不是可本地化的属性。使用XamlReader.Load()您甚至可以对未编译的.xaml文件使用XamlReader.Load()。使用XamlReader.LoadBaml()各种自动化运行时验证程序的其他选项以上是C#学习教程:如何检查XAML元素是否支持AutomationId属性分享所有内容,如果对大家有用需要了解更多关于C#学习教程的内容,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
