WebAii HtmlControl.Click()正在点击错误的控件

时间:2010-07-01 15:13:16

标签: webaii

我已经使用了WebAii测试框架的免费版本[Art of Test在被Telerik收购之前发布的那个]相当多,所以我知道它基本上有效。所以我现在遇到的问题对我来说完全不知所措。

我正在尝试测试现有网站中的导航,并浏览一系列网页。我到了一个页面,其中包含两个按钮。一个是“后退”按钮,它是类型按钮的输入元素,带有一个onclick处理程序,它调用一个只调用history.back()的javascript函数。另一个是提交按钮。

WebAii找到提交按钮没有问题。但是当我告诉它点击它时,就所有外观来说,点击后退按钮。

以下是该网站的相关HTML:

<div align="right"> 
    <table border="0" width="200" cellpadding="8" style="border-collapse: collapse" bordercolor="#E0DFE3"> 
        <tr> 
            <td> 
                <input type="button" value="<- Back" name="B2" onclick="cancelChange()" > 
            </td> 
            <td> 
                <input type="submit" value="Maint Details ->" name="lnkSubmit"> 
            </td> 
        </tr> 
    </table> 
</div> 

这是测试代码:

        HtmlInputSubmit maintDetailsButton = Find.ByAttributes<HtmlInputSubmit>("value=Maint Details ->"); 
        maintDetailsButton.Click(); 

        Assert.IsTrue(ActiveBrowser.Url.Contains(expectedPage), "URL {0} does not contain expected page {1}", ActiveBrowser.Url, expectedPage); 

当我手动点击它时,操作顺序正常,所以我看不出有任何证据表明它是网站的问题。我已经看到大量证据表明它实际上是单击“后退”按钮而不是“维护详细信息”按钮。 (Fiddler在发送点击请求时没有显示请求 - 与执行history.back()一致,因为浏览器只是从它的缓存中重新显示。当我点击时,它确实会转到上一页。最后,如果我从后退按钮中删除“onclick”属性,以便单击该按钮什么也不做,那么当执行测试代码时,该站点什么也不做 - 只是停留在当前页面上。)

我完全不知所措。任何人都可以给我一个提示吗?

1 个答案:

答案 0 :(得分:2)

嗯,我花了一个星期的时间撞到了墙上,但我确实想到了这一点。

首先,我发现了一些东西。根据我的推断,当您执行查找时,WebAii会将该元素作为索引记录到文档中该类型的所有元素的列表中。然后,每当您访问找到的元素时,WebAii将生成“document.GetElementsByTag('')[]形式的JavaScript函数。”当我试图找到一种方法来识别WebAii找到的元素时,我意外地发现了这一点,并且无意中生成了一个javascript错误,该错误显示了它试图在异常中执行的函数。 所以,然后我推断如果它通过索引访问元素,并以某种方式关闭它的索引,那么在我想要它之前点击输入元素是有意义的。 所以我做了一个Find.AllByTagName(“input”),并查看了VS调试器中生成的ReadOnlyCollection,并开始将它找到的输入元素与我可以识别的页面的View Source进行匹配。我发现我发现一个WebAii没有列出,靠近页面顶部,并仔细检查发现丢失的输入元素缺少它的结束角括号。 所以,显然WebAii没有找到它作为输入元素,但javascript做到了。所以,当我的测试说“maintDetails.Click()”时,它被转换为类似“document.GetElementsByTag('input')[20] .click()”的东西,因为缺少元素,它应该是“document.GetElementsByTag( '输入')[21]。点击()”。

我在网站源代码中修复了丢失的结束角括号,然后运行了测试。