如何处理缺少足够独特属性的HTML控件的测试?

时间:2014-04-12 19:33:03

标签: html coded-ui-tests

我正在使用Coded UI Test来测试Web应用程序。

我有一个类Locator,我用它来存储CUIT查找控件所需的细节。要对控件进行操作,页面对象指定定位器而不是控件,而低级函数指定控件并执行操作。

现在,我的班级有:

  • 定位器名称。
  • 一个或多个attrName / attrValue对,可以找到控件的HTML元素。
  • 指定所需匹配的运算符(Contains或EqualTo)。

问题:我需要操作的一些控件没有足够的唯一属性来允许它们被找到。 (是的,我知道开发人员应该改进他们的HTML,但是我不控制它。)我一直在使用定位器来查找附近的元素,然后在DOM中“走”以获得我想要的元素。我讨厌在我的页面对象中使用这个DOM行走代码,甚至考虑到函数中。

一个可能的解决方案:我正在考虑增强类Locator,以便它可以具有attrName / attrValue对对函数的引用有DOM行走代码。这样做的一个优点是页面对象总是使用定位器对象。另一个是当改进HTML时,定位器可以从DOM行走代码更改为attrName / attrValue对,这对页面对象是透明的。

不过,我认为这可能过于复杂了。

这个问题有更好的解决方案吗?

1 个答案:

答案 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);

例如。