gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:28 25 4
gpt4 key购买 nike

我们继承了一个很大的传统 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”中它显示父有 child :

Inspect.exe on menu

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

更新:

我试过带 parent 的 child ,但它返回了一个包含零项的列表:

        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,但我仍然找不到任何 Automation Id。

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

最佳答案

(还)没有好的答案,但我一直在研究完全相同的问题并在过去两周进行研究;我们无法通过编码的 UI 测试找到 DevExpress 元素的自动化 ID,而且当我们这样做时,它很少可靠。在更新 winGrids 的 ideablade 包之前,16.1 不是一个可行的解决方案。有很多人遇到同样的问题。当我回到我的电脑上时,我会发布更多信息,并随时私信我 - 在我们的例子中,DevExpress 元素(在 13.1 中)在运行时制作的方式导致大量自动化 ID 导致堆栈溢出错误 -

据称编码 UI 是唯一可用的 UI 测试(如果您使用的是企业 VS),但我会检查 white。一句警告——因为这些自动化 ID 不断地动态生成,所以你会遇到堆栈溢出问题,你的测试时间越长,或者你尝试和访问的数据越多,并且通过方法调用查找元素就是导致这个问题的原因为了我们。等我回去上类再更新!祝你好运 :-)

关于c# - 如何使用 AutomationId 识别 WinForms DevExpress 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36712297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com