访问网格单元格内的 WinCheckBox,给出对行中第一个单元格的引用
Accessing a WinCheckBox within a cell of a grid, given a reference to the first cell in the row
我正在尝试使用 MTM 测试应用程序。内置的录制回放机制无法处理此应用程序的构建方式,因此我正在尝试构造一个变通方法。
我有一个网格,类似于下面的东西
|[]|[ Fruit ]|[ Read ]|[ Write ]|[ Execute ]|
| | apple | [ ] | [ ] | [ ] |
| | banana | [ ] | [ ] | [ ] |
| | coconut | [ ] | [ ] | [ ] |
交叉点的单元格是复选框。当我了解 Banana 行的读取列的复选框时,它起作用了。当我尝试学习 Write 列的复选框时,它认为它已经知道了,但它实际上是 Read 列的复选框。它只是将其学习为 "UIUncheckedCell",因此实际上只能识别该行中的第一个复选框。这就是我要解决的问题,最好在 GUI 映射中除了 Table 之外没有任何内容。非常有趣的是,如果我在尝试学习复选框之前先聚焦单元格,它会以不同的方式记录它。这让我有点怀疑。
我已经有了一个函数,我可以传入 table 和水果的名称,它会在 table/grid 中搜索第一个有那个水果的行柱子。到目前为止一切顺利。
public WinCell FindCellInTable( WinTable table, int colIndex, string value )
我想要的是一个可以给出列名的函数,它会在 table 中搜索该列,并在 returns 中搜索列号。 (听起来很简单)
public int FindColumnOfHeader( WinTable table, String columnName )
然后,另一个函数,我给它一个包含水果的单元格的单元格引用,它从 Cell 向上导航到 Row,然后从 Row 向上导航到 Cells 列表,然后使用该索引找到相应列的单元格,最后还给我一个 WinCheckBox 对象,我可以用它来选中或取消选中单元格。
public WinCheckBox GetCheckboxFor( WinCell cell, int colIndex )
{
// I think this is the way to get there - it compiles at least!
WinRow row = new WinRow( cell.GetParent() );
UITestControlCollection cells = row.Cells;
UITestControl targetCell = cells[colIndex];
// But then what do I do?
// I tried this, but it didn't work
// (compiles but does not work for setting the checkbox):
WinCheckBox cb = new WinCheckBox( targetCell );
return cb;
}
我不知道如何从单元格引用转到单元格内的复选框,或者即使单元格中有一个复选框,或者它看起来像一个复选框,还是什么。
提前感谢您分享您的专业知识!
事实证明,看似在单元格中的复选框实际上并不存在。当我点击一个单元格并学习复选框时,每个单元格中的所有复选框都被学习为同一个对象。
解决方案是了解一个复选框 UI 地图条目,然后单击我尝试与之交互的单元格以强制对象出现在 UI 中。一旦单元格获得焦点,我就可以与通用的复选框控件元素进行交互,它在视觉上看起来位于网格单元格内的复选框实例上工作。
虽然很丑,但是很管用。
如果有人有更好的答案...
我正在尝试使用 MTM 测试应用程序。内置的录制回放机制无法处理此应用程序的构建方式,因此我正在尝试构造一个变通方法。
我有一个网格,类似于下面的东西
|[]|[ Fruit ]|[ Read ]|[ Write ]|[ Execute ]|
| | apple | [ ] | [ ] | [ ] |
| | banana | [ ] | [ ] | [ ] |
| | coconut | [ ] | [ ] | [ ] |
交叉点的单元格是复选框。当我了解 Banana 行的读取列的复选框时,它起作用了。当我尝试学习 Write 列的复选框时,它认为它已经知道了,但它实际上是 Read 列的复选框。它只是将其学习为 "UIUncheckedCell",因此实际上只能识别该行中的第一个复选框。这就是我要解决的问题,最好在 GUI 映射中除了 Table 之外没有任何内容。非常有趣的是,如果我在尝试学习复选框之前先聚焦单元格,它会以不同的方式记录它。这让我有点怀疑。
我已经有了一个函数,我可以传入 table 和水果的名称,它会在 table/grid 中搜索第一个有那个水果的行柱子。到目前为止一切顺利。
public WinCell FindCellInTable( WinTable table, int colIndex, string value )
我想要的是一个可以给出列名的函数,它会在 table 中搜索该列,并在 returns 中搜索列号。 (听起来很简单)
public int FindColumnOfHeader( WinTable table, String columnName )
然后,另一个函数,我给它一个包含水果的单元格的单元格引用,它从 Cell 向上导航到 Row,然后从 Row 向上导航到 Cells 列表,然后使用该索引找到相应列的单元格,最后还给我一个 WinCheckBox 对象,我可以用它来选中或取消选中单元格。
public WinCheckBox GetCheckboxFor( WinCell cell, int colIndex )
{
// I think this is the way to get there - it compiles at least!
WinRow row = new WinRow( cell.GetParent() );
UITestControlCollection cells = row.Cells;
UITestControl targetCell = cells[colIndex];
// But then what do I do?
// I tried this, but it didn't work
// (compiles but does not work for setting the checkbox):
WinCheckBox cb = new WinCheckBox( targetCell );
return cb;
}
我不知道如何从单元格引用转到单元格内的复选框,或者即使单元格中有一个复选框,或者它看起来像一个复选框,还是什么。
提前感谢您分享您的专业知识!
事实证明,看似在单元格中的复选框实际上并不存在。当我点击一个单元格并学习复选框时,每个单元格中的所有复选框都被学习为同一个对象。
解决方案是了解一个复选框 UI 地图条目,然后单击我尝试与之交互的单元格以强制对象出现在 UI 中。一旦单元格获得焦点,我就可以与通用的复选框控件元素进行交互,它在视觉上看起来位于网格单元格内的复选框实例上工作。
虽然很丑,但是很管用。
如果有人有更好的答案...