根本的解决方法:
$this->waitForCondition("selenium.browserbot.getUserWindow().jQuery.active == 0", "3000"); //此处3000,即限定的超时时间timeout。
$this->click("css=input[type=submit]");
解释waitForCondition用法:
waitForCondition(JavaScriptSnippet,time)
-在限定时间内,等待一段JavaScript.代码返回true值,超时则停止等待
其中"selenium.browserbot.getUserWindow().jQuery.active == 0"这是一段javascript语句,
意思:检查得到的窗体里AJAX的活动数量为0时,则为0即无AJAX活动了,则为真,为真可以继续向下运行。反之,在限定的timeout 3秒时间内,活动数仍不为0,则会报错。
常见的框架:
jQuery : “jQuery.active”
Prototype: “Ajax.activeRequestCount”
Dojo : “dojo.io.XMLHTTPTransport.inFlight.length
我们用的是jQuery框架,即写成jQuery.actiive
3000是3秒。
不正确的解决方法:
for ($second = 0; ; $second++) {
if ($second >= 60) $this->fail("timeout");
try {
if ($this->isElementPresent("css=input[type=submit]")) break;
} catch (Exception $e) {}
sleep(1);
}
此处用的方法:waitForElementPresent(locator,variableName)验证指定元素在页面上。
此方法解决AJAX错误时无效。其检验元素的方法,可解决javascript的问题。常见问题4中会详解。
常见问题2:服务器连接不上。
解决方法:目前我们服务器上同时只能边接两台机器。所以,这儿的解决方法,只能限于两台哦。