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

时间:2014-05-08 19:17:18

标签: javascript ajax extjs selenium-webdriver

我有一个用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进行等效检查吗?

2 个答案:

答案 0 :(得分:2)

啊哈哈!找到了。要等到网站使用ExtJS时AJAX调用完成,请检查以下javascript函数:

return Ext.Ajax.isLoading();

当所有AJAX调用完成时,它将为false。那么,我的代码就变成了:

JavascriptExecutor executer = (JavascriptExecutor) driver;
Boolean ajaxRunning = ((Boolean) executer.executeScript("return Ext.Ajax.isLoading();"));

答案 1 :(得分:1)

也许很讨厌,但也许值得考虑。你说,用户得到的唯一反馈是鼠标光标变为“忙碌”。 ajax请求期间的状态,然后更改回' normal'。

也许这足以进行测试。 您可以尝试使用JavaScript获取当前指针值,并等待它从auto变为wait(在发起请求后)并返回auto(完成后) auto是默认值,也许你默认设置了不同的东西。

您可以使用以下方法检索值:

window.getComputedStyle(document.body).cursor

实施例: http://jsfiddle.net/2fVDP/

也许它并不是应用光标样式的整个身体。你必须调整dom节点。