编码的UI HtmlTable的Rows和Cells属性为null

时间:2015-09-04 14:25:34

标签: c# testing automated-tests coded-ui-tests htmltable-control

我尝试自动化测试,尝试访问HtmlTable对象,但这并不容易..如果我将其添加到UImap,设计器文件会将其显示为一个HtmlTable,但我无法从地图中找到它。 如果我尝试手动找到它,它会工作,但Rows和Cells属性为空,但CellCountRowCount显示正确的值。 我可以到达单元格的唯一方法是将HtmlTable分隔为两个HtmlCustom控件。 第一个" TagName"是" THEAD"第二个是" TBODY"。

        HtmlCustom parent = new HtmlCustom(htmlTable);
        parent.SearchProperties.Add("TagName","TBODY");
        parent.SearchProperties.Add("ClassName","HtmlTag.TBODY");

       var firstchild = parent.GetChildren();
        foreach(var secondchild in firstchild)
        {
            var thrdchild = secondchild.GetChildren();

            foreach (var cells in thrdchild)
            {
                //do sg
            }
        }

分离后,我可以使用GetChildren()函数(基本上是行)获得孩子,但在某些情况下,GetChildren会返回null .. 我无法找到有关此问题的任何信息。我做错了什么?

更新

大部分GetCell函数正常工作并返回单元格本身,但在少数情况下(5%),它无法找到单元格。就像GetChildren函数一样。但这真的很烦人。 我用try catch块编写了一个小的递归函数来捕获NullReferenceException并尝试一次又一次地获取单元格,但它不会帮助很多..

2 个答案:

答案 0 :(得分:0)

您可以使用HtmlCell功能

//for verification

var cell=GetCell(2,1);

//Now you can use the assert class for verification

Assert.areequal("CodedUi ", cell.innertext,"values are not matched");

HtmlCell GetCell(UITestControl parent, int row, int column)
{ 
  var cell= new htmlcell(parent);
  cell.Searchproperties.Add(HtmlCell.Propertynames.Rowindex,row);
  cell.Searchproperties.Add(HtmlCell.Propertynames.Columnindex,column);
   retun cell;
}

答案 1 :(得分:0)

感谢您的回答。

最后我解决了这个问题。解决不是一个正确的词,但理解为什么属性和功能如此随机地工作。

我尝试测试的网页有一些动态JS元素,页面每3秒刷新一次。这是HtmlTable的不正常行为的原因。

现在我尝试在浏览器中以某种方式禁用此自动刷新。