我们继承了一个很大的遗留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();
在“inspect.exe”中,它显示父项具有子项:
更新
我尝试过接触父母的孩子,但它返回一个零项目列表:
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:对于绿色矩形,很抱歉,客户不想在应用程序中显示任何内容。
答案 0 :(得分:0)
还没有好的答案,但我已经在完全相同的问题上工作并在过去两周内进行了研究;我们无法通过编码的UI测试找到DevExpress元素的自动化ID,当我们做它很少可靠时。在更新winGrids的ideablade包之前,16.1不是一个可行的解决方案。有很多人都有同样的问题。 当我回到我的计算机时,我会发布更多文章,并且随意地告诉我 - 在我们的例子中,DevExpress元素(在13.1中)的运行方式是在运行时产生的,导致大量的自动化ID导致堆栈溢出错误 -
编码用户界面被声称是唯一可用的UI测试(如果你使用的是企业VS),但看看白色。一句警告 - 因为这些自动化工具会随时生成,您将遇到堆栈溢出问题,测试时间越长,或者您尝试访问的数据越多,并且通过方法调用find元素是什么为我们造成的。我回去工作时生病了!祝你好运:-)