我正在尝试为包含两个复选框和提交超链接的简单Web表单页面创建一个编码的UI测试(使用VS2010 Ultimate)。复选框具有相同的文本标签; "我同意"。
运行测试时,将检查第一个复选框,第二个复选框未选中,单击超链接以提交表单(验证失败)。
如何将第二个复选框添加到测试图并区分两者?
答案 0 :(得分: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类的非设计器部分中的代码。
答案 1 :(得分:0)
有多种方法可以做到这一点。
尝试找出id,name等对象的唯一属性。
尝试找出复选框的父控件/容器,然后使用{TAB}或{UP} / {DOWN}键。
使用键盘的{TAB}键。找出以前的控制 - &gt;点击该控件 - &gt;使用该控件中的{TAB}来关注复选框控件并使用{UP} / {DOWN}箭头键进行导航。
找出文档的文本,然后根据需要点击第一次或第二次出现的文档。 代码找出文档文本,
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(" ", " ");
return Regex.Replace(completeText, @"\s+", " ");
}