繁体   English   中英

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

[英]CodedUI GetChildren() doesn't return children with HTML5 tags like HEADER, SECTION, ARTICLE, NAV

在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” div控件上执行GetChildren()时,仅返回其中包含“ lastdiv” div控件的1个结果。 它应该返回5个控件。

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

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

在codedui中遍历HTML5标签是否存在问题?

尝试查看找到的一个控件的子控件。 我不知道有什么可以说您显示的HTML结构必须以完全相同的级别数表示。 换个说法,UI控件的级别可能比HTML结构所需的最低级别高。

要了解HTML的表示方式,您可以使用编码UI十字线工具。 从五个部分之一(或其子部分)开始,然后使用四个导航箭头在层次结构中向上移动,以查看“编码的用户界面”在每个级别上可以看到的项目。

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

我已在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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM