繁体   English   中英

如何让WebDriver等到Sencha AJAX调用完成?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM