我使用过WebAii测试框架的免费版本,在被Telerik收购之前,它是由Art of test发布的,所以我知道它基本上是有效的。所以我现在遇到的问题完全让我困惑。
我正尝试在现有站点中测试导航,并浏览一系列页面。我进入了一个有两个按钮的页面。一个是"back“按钮,它是一个类型为button的输入元素,带有一个onclick处理程序,该处理程序调用一个仅调用history.back()的javascript函数。另一个是提交按钮。
WebAii可以很容易地找到提交按钮。但是,当我告诉它单击它时,它在所有的外观上都是单击back按钮。
以下是来自该站点的相关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()一致,因为浏览器只是从它的缓存重新显示。当我点击的时候,它确实会跳转到上一页。最后,如果我从back按钮中删除了"onclick“属性,那么单击该按钮什么也不做,那么在执行测试代码时,站点什么也不做--只是停留在当前页面上。)
我完全不知所措。有人能给我个提示吗?
发布于 2010-07-02 04:12:08
我花了一周的时间才把头撞到墙上,但我还是弄明白了。
首先,我发现了一些东西。根据我所能推断的,当您执行Find.时,WebAii会将该元素作为索引跟踪到文档中该类型的所有元素的列表中。然后,无论何时访问找到的元素,WebAii都会生成一个格式为“document.GetElementsByTag(‘’)[]”的JavaScript函数。当我试图找到一种方法来识别WebAii找到的元素时,我意外地发现了这一点,并无意中生成了一个javascript错误,该错误显示了它试图在异常中执行的函数。因此,然后我推断,如果它通过索引访问元素,并且不知何故关闭了它的索引,那么它在我想要的元素之前单击输入元素是有意义的。所以我做了一次输入(“Find.AllByTagName”),并在VS调试器中查看了生成的ReadOnlyCollection,并开始将它找到的输入元素与我在查看页面的View Source时可以识别的元素进行匹配。我发现我找到了一个WebAii没有列出的元素,就在页面顶部附近,仔细检查后发现,缺少的输入元素缺少了它的右尖括号。所以,显然WebAii没有发现它是一个输入元素,但是javascript找到了。因此,当我的测试说"maintDetails.Click()“时,由于缺少元素,它应该是"document.GetElementsByTag('input')21.click()".,而它却被转换为类似maintDetails.Click()的内容
我修复了站点源代码中缺少的关闭尖括号,并运行了测试。
https://stackoverflow.com/questions/3159125
复制相似问题