Selenium: Ajax Testing



请向我简要介绍使用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代码库

最新更新