在CodedUI测试期间与多列WinList控件的单元连接

时间:2014-09-26 19:36:42

标签: c# user-interface coded-ui-tests

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

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

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从上面使用代码?

1 个答案:

答案 0 :(得分:1)

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.