C# 如何使用AutomationId识别WinForms DevXPress控件?
我们继承了一个大型的旧版WinForms应用程序,它使用DevExpress控件(DevExpress.XtraNavBar.v8.1和DevExpress.XtraEditors.v8.1)(我已经能够升级到版本15.1。它是DevExpress提供的一个项目转换器工具,允许您使用最新的DevEpress控件) 停止手工测试并创建一个自动化套件来测试应用程序的压力很大。我们已经调查了这些工具,这是满足我们需求的最佳工具 问题在于DevExpress控件,因为我们根本无法识别它们。尽管我们能够识别这些控件的父控件C# 如何使用AutomationId识别WinForms DevXPress控件?,c#,winforms,devexpress-windows-ui,white-framework,C#,Winforms,Devexpress Windows Ui,White Framework,我们继承了一个大型的旧版WinForms应用程序,它使用DevExpress控件(DevExpress.XtraNavBar.v8.1和DevExpress.XtraEditors.v8.1)(我已经能够升级到版本15.1。它是DevExpress提供的一个项目转换器工具,允许您使用最新的DevEpress控件) 停止手工测试并创建一个自动化套件来测试应用程序的压力很大。我们已经调查了这些工具,这是满足我们需求的最佳工具 问题在于DevExpress控件,因为我们根本无法识别它们。尽管我们能够识
var application = Application.Launch(@"C:\App\app.exe");
var window = application.GetWindow(SearchCriteria.ByAutomationId("MainMDI"), InitializeOption.NoCache);
var menu = window.Get(SearchCriteria.ByAutomationId("navBarMainMenu")); // this is the parent of those DevExpress controls
// here throws an exeception because cannot find the 'Users' menu item (it is actually other text)
var users = menu.Get(SearchCriteria.ByText("Users"));
users.Click();
在“inspect.exe”中,它显示父对象具有子对象:
这是使用“UI自动化验证”:
更新:
我尝试过获取父对象的子对象,但它返回一个包含零项的列表:
var application = Application.Launch(@"C:\App\app.exe");
var window = application.GetWindow(SearchCriteria.ByAutomationId("MainMDI"), InitializeOption.NoCache);
var menu = window.Get(SearchCriteria.ByAutomationId("navBarMainMenu"));
System.Windows.Automation.AutomationElement automationElement = menu.AutomationElement;
AutomationElementCollection automationElementCollection = automationElement.CachedChildren; // the collection is empty
foreach (AutomationElement element in automationElementCollection)
{
string name = element.Current.Name;
if (name == "Users")
{
// try to click on it
}
}
更新2:
我已将DevExpress升级到v15.2,但仍然找不到任何自动化Id
注:对于绿色矩形表示抱歉,客户不想显示应用程序中的任何内容。还没有很好的答案,但我在过去两周一直在研究完全相同的问题;我们无法通过编码的UI测试找到DevExpress元素的自动化ID,而且当我们进行测试时,它很少可靠。16.1在winGrids的IdeaBrade包更新之前不是可行的解决方案。很多人都有同样的问题。
当我回到我的计算机时,我会发布更多信息,并随时对我进行dm-在我们的例子中,DevExpress元素(在13.1中)在运行时的制作方式会导致大量自动化ID导致堆栈溢出错误-
编码用户界面(codedui)被认为是它唯一的工作用户界面测试(如果你使用的是企业版VS),但我会看看white。一句警告的话——因为这些自动化ID一直在动态生成,所以测试时间越长,或者尝试访问的数据越多,就会遇到堆栈溢出问题,而按方法调用find元素正是导致这种情况的原因。我回去工作时会更新的!祝你好运:-)这是我几个月前问过的一个问题。正如您所说的,唯一可行的解决方案是在Visual Studio Enterprise中使用“编码UI”框架,并购买DevXPress Universal subscription,它超越了与编码UI的集成。遗憾的是,没有免费的白色框架的可行解决方案。我认为DevExpress是故意这样做的,这样可以从订阅中挤出更多的钱