2

我最近开始使用编码的 UI 测试来自动化我的 Windows 应用程序,并且在访问一些 MSAA 控件时遇到了问题。我正在手动编码我的自动化,不想将控件添加到 UI Map 然后使用它。

我卡住的控件是左窗格上的一个treeItem,它选择机器,详细信息显示在中心的左侧客户区域。

我曾尝试使用 UI 控件上的十字准线所示的属性来搜索控件,但徒劳无功。

以下是我尝试过的代码 -

UITestControl machine = new UITestControl(App);
        machine.TechnologyName = "MSAA";
        machine.SearchProperties.Add(WinTreeItem.PropertyNames.ControlType,     "TreeItem");
        machine.SearchProperties.Add(WinTreeItem.PropertyNames.Name, "Machine1");
        machine.SearchProperties.Add(WinTreeItem.PropertyNames.ControlName, "m_tvPlantStructureView");
Mouse.Click(machine); // This code gives an error

错误-

Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException:播放未能找到具有给定搜索属性的控件。其他详细信息: TechnologyName:'MSAA' ControlType:'TreeItem' 名称:'Machine1' ControlName:'m_tvPlantStructureView' ---> System.Runtime.InteropServices.COMException:错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回。

参考附件。让我知道,有什么问题以及要遵循什么过程才能完全摆脱这种未来无法识别的控制错误。

目前,我遵循的方法是做一个十字准线并获取属性,然后对该控件的属性进行编码以自动化用户操作和断言。但这种方式并不总是奏效。

让我知道是否有更好的方法。

4

2 回答 2

0

在单击鼠标之前,我使用

machine.Find();

之后,我检查机器是否具有与 null 不同的值,如果它不为 null,则执行单击。

于 2014-10-27T10:49:45.507 回答
0

您需要进行层次结构搜索。创建 2 个控件:首先将 Treeview 作为 Window。使用控件名称 m_tvPlantStructureView,然后创建一个名为 Machine1 的新 TreeItem。

var treeView = new WinWindow(App);
treeView.SearchProperties.Add(WinWindow.PropertyNames.ControlName, "m_tvPlantStructureView");

var machine= new WinTreeItem(treeView);
machine.SearchProperties.Add(WinTreeItem.PropertyNames.Name, "Machine1");

Mouse.Click(machine); // This code gives an error

如果失败,另一件事是从树视图中删除 App 并添加窗口标题。

如果您有任何问题,请告诉我。

var treeView = new WinWindow();
treeView.WindowTitles.Add("mywindowname");
treeView.SearchProperties.Add(WinWindow.PropertyNames.ControlName, "m_tvPlantStructureView");

var machine= new WinTreeItem(treeView);
machine.SearchProperties.Add(WinTreeItem.PropertyNames.Name, "Machine1");

Mouse.Click(machine); // This code gives an error
于 2014-06-26T15:13:37.990 回答