请向我简要介绍使用selenium RC进行Ajax测试的情况。在Ajax元素中没有反映视图源代码,但使用firebug我们可以看到HTML源代码中的更改。
有两种方法与it Ajax测试相关。。
1-方法"waitForCondition(java.lang.String脚本,java.lang.Sstring超时),要提供脚本,我们必须自己创建一个java脚本,或者它应该是网页上存在的相同Ajax脚本/java脚本。
如果我在以下几点上错了,请纠正我。。
2-方法"waitForElemantPresent(Locator)",我们检查firebug中的元素,并在该方法中检查相同的元素是self-waitForelemantPreset(Locator)。
如果我在测试Ajax应用程序时遗漏了什么,请告诉我。
我从一篇文章中得到了帮助,并得到了@Hannibal 的帮助
http://agilesoftwaretesting.com/?p=111
JQuery:"JQuery.active"
原型:"Ajax.activeRequestCount"
Dojo:"Dojo.io.XMLHTTPTransport.inFlight.length"
所以,如果有Ajax调用,我们可以使用第二个选项。
selenium.waitForCondition(
"selenium.browserbot.getCurrentWindow().jQuery.active == 0",
timeout);
要回答您的第一点,yes waitForCondition(javascript,timeout)
将运行javascript,直到它返回真值,或者当超时时。您应该查看相关的api文档,因为您需要使用browserbot在应用程序窗口中运行脚本。链接到API文档在这里
在Selenium1中,处理Ajax条件的一种方法是创建自定义函数,这些函数将等待条件满足或超时。如果元素不存在,普通的Selenium.isElementPresent将立即失败,而您的自定义函数将等待一段时间(Ajax加载的时间)后才会失败。例如,您可以参考以下isElementPresent的自定义方法。这是用JAVA编写的,你应该能够在你使用的编程语言中使用相同的逻辑。
public boolean AjaxIsElementPresent(String elementToLookFor, int timeOutValueInSeconds){
int timer=1;
while(timer<=timeOutValue){
if(selenium.isElementPresent(locator))
return true;
else
Thread.sleep(1000);
}
return false;
}
如果元素在指定的timeoutValue之后仍然不存在,则此方法将返回布尔值false。如果它在timeoutvalue中找到元素,则返回true。
我在Selenium 2中看到了一些用于AjaxCondition处理的内置函数。但我还没有用过。你可以参考Selenium 2代码库