2016-02-19 29 views
0

我试图使用MTM测试应用程序。内置的记录和回放机制无法处理这个应用程序的构建方式,所以我试图构建一个解决方法。访问网格的单元格中的WinCheckBox,给出对该行中第一个单元格的引用

我有一个网格,一个类似于以下

|[]|[ Fruit ]|[ Read ]|[ Write ]|[ Execute ]| 
| | apple | [ ] | [ ] | [ ]  | 
| | banana | [ ] | [ ] | [ ]  | 
| | coconut | [ ] | [ ] | [ ]  | 

在十字路口的细胞复选框。当我学习Banana行的Read列的复选框时,它可以工作。当我尝试学习Write列的复选框时,它认为它已经知道它,但它确实是Read列的复选框。它只是将其学习为“UIUncheckedCell”,因此只能识别行中的第一个复选框。这就是我正在尝试解决的问题,最好是除了表之外,在GUI映射中没有任何东西。有趣的是,如果我在尝试学习复选框之前先关注单元格,它会以不同的方式记录它。这让我有点怀疑。

我已经有了一个函数,可以在表格和水果名称中传递,它将在表格/网格中搜索第一列中具有该水果的行。到现在为止还挺好。

public WinCell FindCellInTable(WinTable table, int colIndex, string value) 

我想要的是一个函数,我可以给一个列名称,它在表中搜索该列,并返回一个列号。 (听起来很容易不够)

public int FindColumnOfHeader(WinTable table, String columnName) 

然后,另一个函数,我给它的单元参考与在它的果实的细胞,并将其从细胞导航到列,然后从行到细胞列表,然后使用该索引找到相应列的Cell,最后将我传回的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; 
} 

我无法弄清楚如何从单元格引用去的复选框的单元内,或者即使在小区的复选框,或者如果它只是看起来像一个复选框,或者是什么。

在此先感谢您分享您的专业知识!

回答

0

事实证明,看起来在单元格中的复选框并不是真的存在。当我点击一个单元格并学习复选框时,每个单元格中的所有复选框都被学习为同一个对象。

解决方案是学习一个复选框UIMap条目,然后单击我尝试与之交互的单元格,以强制该对象出现在UI中。一旦单元格具有焦点,我可以与常用复选框控件元素进行交互,并且它可以在复选框的实例上工作,该复选框视觉上似乎位于网格单元格内。

这是丑陋的,但它的作品。

如果有人有更好的答案...

相关问题