如何使用AutomationId识别WinForms DevExpress控件?

时间:2016-04-19 08:07:27

标签: c# winforms devexpress-windows-ui white

我们继承了一个很大的遗留WinForms应用程序,即使用DevExpress控件(DevExpress.XtraNavBar.v8.1和DevExpress.XtraEditors.v8.1)(我已经能够升级到版本15.1。它是由DevExpress提供的Project Converter工具,允许您使用最新的DevEpress控件。)

要停止进行手动测试并创建一个可以测试应用程序的自动化套件,还有很多压力。我们调查了那里的工具,White framework是满足我们需求的最佳工具。

问题在于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();

Application menu with inspect.exe

在“inspect.exe”中,它显示父项具有子项:

Inspect.exe on menu

这是使用“UI自动化验证”: enter image description here

更新

我尝试过接触父母的孩子,但它返回一个零项目列表:

        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。

P.S:对于绿色矩形,很抱歉,客户不想在应用程序中显示任何内容。

1 个答案:

答案 0 :(得分:0)

还没有好的答案,但我已经在完全相同的问题上工作并在过去两周内进行了研究;我们无法通过编码的UI测试找到DevExpress元素的自动化ID,当我们做它很少可靠时。在更新winGrids的ideablade包之前,16.1不是一个可行的解决方案。有很多人都有同样的问题。 当我回到我的计算机时,我会发布更多文章,并且随意地告诉我 - 在我们的例子中,DevExpress元素(在13.1中)的运行方式是在运行时产生的,导致大量的自动化ID导致堆栈溢出错误 -

编码用户界面被声称是唯一可用的UI测试(如果你使用的是企业VS),但看看白色。一句警告 - 因为这些自动化工具会随时生成,您将遇到堆栈溢出问题,测试时间越长,或者您尝试访问的数据越多,并且通过方法调用find元素是什么为我们造成的。我回去工作时生病了!祝你好运:-)