【问题标题】:Can't automate Edit Control and List box using TestStack.White无法使用 TestStack.White 自动化编辑控件和列表框
【发布时间】:2016-03-14 12:55:06
【问题描述】:

我有一个使用 Visual Studio 2012 Professional 在 C++ MFC 中编写的应用程序。目前我想使用 C# 编写的 TestStack.White 框架创建一些自动化脚本。

我无法控制列表框和编辑控件。 我正在使用间谍++。编辑控件嵌套在组框内,我无法检查自动化 ID。

我的代码示例

var psi = new ProcessStartInfo(ExeSourceFile);
application = Application.AttachOrLaunch(psi);
mainWindow = application.GetWindow(SearchCriteria.ByText(applicationName), InitializeOption.NoCache);

其中 ExeSourceFile 是应用程序的路径。

这是我尝试过的方式。其中 IDC_Edit 是设计者的 ID。

TextBox TextObj = mainWindow.Get<TextBox>     (SearchCriteria.ByAutomationId("IDC_Edit"));
  1. 如何控制“列表框”检查/计数行数据(目前我使用向上和向下箭头作为解决方法)?
  2. 如何控制组框内的“编辑控件”(目前作为解决方法,我使用 Tab 键更改焦点)?

我尝试通过 ID 获取 MFC 控件,但失败了。我应该使用 Spy++ 以外的工具还是其他框架?

编辑:

这里是截图表单检查。

我尝试使用 id "1221" 和 "0x1221" 但没有成功。

【问题讨论】:

  • GroupBox Controls 不实现任何嵌套。无论 Edit 控件是否位于 GroupBox 内,自动化方面都没有区别。如果您需要查看对象的可访问树,请改用Inspect 工具。我假设 TestStack White 使用相同的可访问树进行自动化。
  • 我不熟悉这个测试框架,但是谁来把文本“IDC_Edit”转换成它的数值呢?
  • 能否请您发布来自检查的控件属性的屏幕截图。
  • 我回家后看看这个。由于我以前从未使用过 MFC 应用程序,因此我需要花一点时间来设置 MFC 应用程序。感谢您的屏幕截图。

标签: c# c++ mfc white-framework


【解决方案1】:

我使用 MFC 向导制作了一个看起来像 Visual Studio 的应用程序,并在属性窗口中添加了一个编辑控件,以便我可以测试该编辑控件。我无法添加组框,因为据我所知不存在 CGroupBox。如果可以请提供一些关于如何实现组框的代码,我可以将其添加到我的答案中。

希望我能回答你的一些问题。

这是我用 C# 编写的控制台应用程序,用于自动化“列表框”和“编辑”控件。

 using System;
 using TestStack.White;
 using TestStack.White.UIItems;
 using TestStack.White.UIItems.Finders;
 using TestStack.White.UIItems.ListBoxItems;

 namespace ConsoleApplication1
 {
     public class Program
     {
         public static void Main(string[] args)
         {
             var application = Application.Attach("MFCApplication1");
             var window = application.GetWindow("MFCApplication11 - MFCApplication1");

             //Edit Control
             var propertyPane = window.Get<Panel>(SearchCriteria.ByAutomationId("150"));
             var edit = propertyPane.Get<TextBox>(SearchCriteria.ByAutomationId("1"));

             //Type this text into the edit control
             edit.Text = "Hello World";

             //List View
             var output = window.Get<Panel>(SearchCriteria.ByAutomationId("149"));
             var list = output.Get<ListBox>(SearchCriteria.ByAutomationId("2"));

             //Output the count of how many rows exist
             Console.Out.WriteLine(list.Items.Count);

             //Select the second row
             list.Items[1].Select();
         }
     }
 }

这是我测试的应用程序的图像,其中突出显示了我自动化的控件。

【讨论】:

  • 当我关闭 Visual Studio 异常时,TextBox 开始工作。我无法选择任何列表行,可能是因为它已绘制。使用其他列表一切正常。感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 2020-07-20
  • 2014-08-30
  • 1970-01-01
相关资源
最近更新 更多