CodedUI测试期间与多列WinList控件的单元格接口

本文关键字:控件 WinList 单元格 接口 测试 CodedUI | 更新日期: 2023-09-27 18:24:54

我在与多列WinList中的单元格(不确定这些单元格是否真的是单元格)接口时遇到了困难。我正在测试一个windows应用程序。我用多个工具查询了对话框,控件显然是WinList,而不是WinTable。

我希望有能力完成3件事:

1) 读取单元格的值
2) 编辑单元格的值
3) 鼠标点击单元格

我已经能够使用以下代码完成"从单元格读取"(项目#1):

var value = new WinListItem(myGetList(myListId).Items[3]).GetColumnValues()[1];

当涉及到编辑或鼠标点击单元格时,我找不到任何方法来定位它们。

首先,我尝试将WinList转换为WinTable,这样我就可以使用更强大的WinTable属性:

var table = (WinTable)(myGetList(myListId));

这是一次失败。

我还尝试使用WinList:实例化一个表

var table = new WinTable(myGetList(myListId);

这也是一次失败。

我正在测试一个动态应用程序,并尽量避免使用屏幕坐标和UImap。我发现这些方法缺乏持久性,并且希望尽可能使用代码。

有人能帮我完成项目2&3从上面使用代码?

CodedUI测试期间与多列WinList控件的单元格接口

UIMap的持久性取决于其中的代码。由于该映射有两个分部类(map.designer.cs和map.cs),我将使用map.cs分部类并以与步骤1相同的方式创建对象。

// Here, you've created a WinListItem
new WinListItem(myGetList(myListId).Items[3])
// so, let's extrapolate that:
public WinListItem MyListItem(int row, int column)
{
    WinListItem target = new WinListItem(myGetList(myListId).Items[row]);
    UITestControlCollection columns = target.GetChildren();
    return (WinListItem)columns[column];
}

现在,您可以发送MyWinListItem(3, 1).DisplayText = "blah";Mouse.Click(MyWinListItem(3, 1));来执行需求2和3。