通过在代码中添加搜索属性来动态搜索控件

时间:2015-08-17 05:52:13

标签: coded-ui-tests

我正在尝试通过在需要时在我的代码中添加一些搜索属性来识别运行时的控件。在Visual Studio 2012中使用编码的UI。

请参阅下面的截图。我的测试场景是:

1)点击特定标签(屏幕截图中选择的2 nd 标签页)

选项卡列表已修复,因此我可以在My UIMap中为每个选项卡创建一个控件。

2)在每个Tab中,都有一个包含一些数据的表格结构。表标题是固定的,但行数和行内数据是动态的。

3)检查复选框是否有所需的标签

4)选择所需标签的类型

UI for the desktop App(Wpf)

我创建了我的UIMap:

UIMap in CodedUI

添加了以下代码:

UIEquipmentTagText.SearchProperties.Add(new PropertyExpression(WpfText.PropertyNames.Name, "1302"));// say I want second row
To fetch the respective checkbox control, I am using:
UITestControl UIEquipmentTagCell = UIEquipmentTagText.GetParent();//get the cell of Tag name
UITestControl UIEquipmentTagRow = UIEquipmentTagCell.GetParent();//get the row
UITestControl UIEquipmentCheckBoxCell = UIEquipmentTagRow.GetChildren()[0];//get the first cell i.e the checkbox cell
UITestControl UIEquipmentCheckBox = UIEquipmentCheckBoxCell.GetChildren()[0]; // get the checkbox control

但这不适合我。我猜UIRow控件只引用第一行(虽然我没有指定查找1 st 行)

我不想在行的搜索条件中包含行号。

是否有任何解决方法可以根据标记文本获取我想要的所有控件?

1 个答案:

答案 0 :(得分:2)

最终想出一个解决方案..记住所有行并迭代以找到匹配的行

UITestControlCollection allRows = row.FindMatchingControls(); 


            foreach (UITestControl x in allRows)
            {
                UITestControl Tag = x.GetChildren()[1].GetChildren()[0];//row->tag cell->tag text

                if (Tag.GetProperty("Name").Equals("1302"))//say I want to select row having 1302 tag 
                {
                    UITestControl checkBox = Tag.GetParent().GetParent().GetChildren()[0].GetChildren()[0];//TagText->TagCell->Row->CheckBoxCell->Checkbox

                    Mouse.Click(checkBox);
                }

            }