[英]How to have WebDriver wait until Sencha AJAX call is complete?
我有一个用Selenium WebDriver测试的页面。
底层页面使用Sencha JavaScript库。 我有一个问题,在我的测试中,我在一个字段中输入一个值,然后有一个AJAX调用验证该字段。 如果有效,则页面上的任何内容都不会更改。 如果值无效,该字段将以红色突出显示。
问题是我的脚本在此调用完成之前尝试离开页面。 我知道我可以让它等待一段时间,但这不是一个好主意。
目前,我为我的驱动程序设置了这些选项(这是Java。超时为120):
int timeout = 120;
driver.manage().timeouts().implicitlyWait(timeout, TimeUnit.SECONDS);
driver.manage().timeouts().setScriptTimeout(timeout, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(timeout, TimeUnit.SECONDS);
我知道我可以或多或少地等待jQuery AJAX调用:
JavascriptExecutor executer = (JavascriptExecutor) driver;
Boolean jqueryDone = (Boolean) executer.executeScript("return jQuery.active == 0");
并包裹等待那个条件。
我可以对Sencha / ExtJS进行同等检查吗?
啊哈! 找到了。 要等到网站使用ExtJS时AJAX调用完成,请检查以下javascript函数:
return Ext.Ajax.isLoading();
所有AJAX调用完成后都将为false。 那么,我的代码变成了:
JavascriptExecutor executer = (JavascriptExecutor) driver;
Boolean ajaxRunning = ((Boolean) executer.executeScript("return Ext.Ajax.isLoading();"));
也许很hacky,但也许值得考虑。 你说,用户获得的唯一反馈是在ajax请求期间鼠标光标变为“忙”状态,然后再变回“正常”。
也许这足以进行测试。 您可以尝试使用JavaScript获取当前指针值,并等待它从auto
变为wait
(在启动请求之后)并返回auto
(完成时)auto是默认值,也许你默认设置不同的东西。
您可以使用以下方法检索值:
window.getComputedStyle(document.body).cursor
示例: http : //jsfiddle.net/2fVDP/
也许不是整个身体都应用了光标样式。 你必须调整dom节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.