CodedUI GetChildren()不返回带有HEADER,SECTION,ARTICLE,NAV等HTML5标签的子代

时间:2014-04-02 11:33:02

标签: html5 coded-ui-tests

在codedUI中,我无法通过HTML5标签的html页面中的GetChildren()方法遍历。

我的Html结构是这样的。

HTML
  |-BODY
      |-DIV id="pagetop"
         |- HEADER class="headerclass"
         |- NAV class="navclass"
         |- SECTION class="sectionclass"
         |- FOOTER class="footerclass"
         |- DIV id="lastdiv"

问题:在" pagetop"上执行GetChildren() div控制,只有1个结果返回" lastdiv" div控制在里面。 它应该返回5个控件。

我能够捕获UIMap for SECTION(或其他HTML5标签)并能够通过GetParent()方法向后遍历,但另一种方式不起作用。

SECTION.GetParent() = DIV id="pagetop"  [Works as expected]
SECTION.GetParent().GetChildren() = Only 1 result [This is wrong, should be 5]

在codedui中遍历HTML5代码是否存在问题?

2 个答案:

答案 0 :(得分:1)

尝试查看找到的一个控件的子控件。我不知道任何说你显示的HTML结构必须用完全相同的级别表示。换句话说,UI控件可能具有额外的级别,而不是HTML结构所需的最小级别。

要了解HTML的表示方式,您可以使用Coded UI交叉毛发工具。从五个部分中的一个(或他们的孩子)开始,然后使用四个导航箭头向上移动层次结构,以查看Coded UI在每个级别可以看到的项目。

另一种方法可能是使用调用GetChildren()的递归代码来降级层次结构并准确显示每个级别的内容。您可以在我对此问题Recursively locating a UIElement with InnerText in C#的回答中使用基于递归例程的代码,但使用较小的maxDepth并添加一些Console.Writeline()或其他打印语句来显示找到的控件。

答案 1 :(得分:0)

我已在VS2013反馈论坛中针对此问题提交了一个错误。 可在此处跟踪:https://connect.microsoft.com/VisualStudio/feedback/details/898599/

根据AdrianHHH的建议,我目前正在这样做以获得控制的所有孩子。这会将所有控件(包括HTML5控件)返回为HtmlCustom。

    private List<UITestControl> GetAllChildren(UITestControl uiTestControl)
    {
        var child = new HtmlControl(uiTestControl);
        child.SearchProperties.Add("InnerText", "", PropertyExpressionOperator.Contains);
        var items = child.FindMatchingControls().ToList();
        var trueChildren = items.Where(i => i.GetParent().Equals(uiTestControl)).ToList();
        return trueChildren;
    }