我正在使用Coded UI Test来测试Web应用程序。
我有一个类Locator
,我用它来存储CUIT查找控件所需的细节。要对控件进行操作,页面对象指定定位器而不是控件,而低级函数指定控件并执行操作。
现在,我的班级有:
问题:我需要操作的一些控件没有足够的唯一属性来允许它们被找到。 (是的,我知道开发人员应该改进他们的HTML,但是我不控制它。)我一直在使用定位器来查找附近的元素,然后在DOM中“走”以获得我想要的元素。我讨厌在我的页面对象中使用这个DOM行走代码,甚至考虑到函数中。
一个可能的解决方案:我正在考虑增强类Locator
,以便它可以具有attrName / attrValue对或对函数的引用有DOM行走代码。这样做的一个优点是页面对象总是使用定位器对象。另一个是当改进HTML时,定位器可以从DOM行走代码更改为attrName / attrValue对,这对页面对象是透明的。
不过,我认为这可能过于复杂了。
这个问题有更好的解决方案吗?
答案 0 :(得分:1)
不确定你的定位器是如何工作的,但你能找到最接近该对象的父级,让我们说一个id为“parent”的HTML Div,然后计算下面的标签实例吗?例如:
HtmlDiv id="parent">
HtmlHyperlink>text1</
HtmlHyperlink>text2</
需要以下代码:
public HtmlHyperlink text2Link
{
get
{
HtmlDiv parentDiv = new HtmlDiv(browser);
parentDiv.SearchProperties["id"] = "parent";
HtmlHyperlink target = new HtmlHyperlink(parentDiv);
target.SearchProperties["TagInstance"] = "2";
}
}
这将在父对象下找到第二个超链接。 (标签实例不是基于零的。)
然后,您只需根据需要与对象进行互动:
Mouse.Click(text2Link);
例如。