2014-10-07 46 views
0

我试图用两个复选框和一个提交超链接创建一个编码的UI测试(使用VS2010旗舰版)。复选框具有相同的文本标签; “我同意”。VS2010编码UI测试 - 测试生成器无法映射具有相同文本的两个复选框

  • 使用编码的UI测试构建器来记录动作,只捕获一个复选框,因为两个复选框都具有相同的文本/相同的UIMap名称。
  • 使用十字光标工具选择第二个复选框,它将替换上一个复选框实例,因为它们具有相同的文本/相同的UIMap名称。

当测试运行时,第一个复选框被选中,第二个复选框被选中,并且超链接被单击以提交表单(失败验证)。

如何将第二个复选框添加到测试图并区分两者?

回答

0

如果复选框本身没有唯一属性,请指定每个复选框的父对象以区分它们。

例子:
对于

<div id="box1Parent"> 
    <input label="I Agree"/> 
</div> 
<div id=box2Parent"> 
    <input label="I Agree"/> 
</div> 

你会定义对象是这样的:

public HtmlCheckBox AgreementBox1() 
{ 
    HtmlDiv parent = new HtmlDiv(browser); 
    parent.SearchProperties["id"] = "box1Parent"; 
    HtmlCheckBox target = new HtmlCheckBox(parent); 
    target.SearchProperties["label"] = "I Agree"; 
    return target; 
} 

然后,做了第二个盒子一样的,但父指向box2Parent。这将是您的代码在.uitest类的非设计器部分。

0

有多种方法可以做到这一点。

  1. 试着找出像id,name这样的对象的唯一属性。

  2. 尝试查找复选框的父控件/容器,然后使用{TAB}或{UP}/{DOWN}键。

  3. 使用键盘的{TAB}键。找到以前的控件 - >点击该控件 - >使用该控件中的{TAB}来关注复选框控件,并使用{UP}/{DOWN}箭头键导航。

  4. 找到文件的文本,并根据您的需要点击第一或第二次出现。 代码找出文档中的文本,

    public string GetCurrentPageVisibleTexts() 
        { 
         var window = this.UIMap.<WindowObject> 
         UITestControlCollection c = window.GetChildren(); 
         var pgContent = (string)c[0].GetProperty("OuterHtml"); 
         var document = new HtmlAgilityPack.HtmlDocument(); 
         document.LoadHtml(pgContent); 
    
         // We don't want these in our result 
         var exclusionText = new string[] { "<!--", "<![CDATA", "function()", "</form>" }; 
    
         var visibleTexts = new List<string>(); 
         //var nodes = document.DocumentNode.Descendants().Where(d => !d.Name.ToLower().Equals("span")); 
         foreach (var elem in document.DocumentNode.Descendants()) 
         { 
          // Foreach element iterate its path back till root 
          // and look for "display: none" attribute in each one of its parent node 
          // to verify whether that element or any of its parent are marked as hidden 
          var tempElem = elem; 
    
          while (tempElem.ParentNode != null) 
          { 
           if (tempElem.Attributes["style"] != null) 
           { 
            // if hidden attribute found then break. 
            if (tempElem.Attributes["style"].Value.ToLower().Contains("display: none")) break; 
           } 
           tempElem = tempElem.ParentNode; 
          } 
    
          // If iteration reached to head and element is found clean of hidden property then proceed with text extraction.      
          if (tempElem.ParentNode == null) 
          { 
           if (!exclusionText.Any(e => elem.InnerText.Contains(e)) 
           && (!elem.InnerText.Trim().IsNullOrEmpty()) 
           && (!elem.HasChildNodes)) 
           { 
            visibleTexts.Add(elem.InnerText); 
           } 
          } 
         } // Foreach close 
    
         var completeText = string.Join(" ", visibleTexts).Replace("&nbsp;", " "); 
         return Regex.Replace(completeText, @"\s+", " "); 
        } 
    
相关问题