我有一个用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进行等效检查吗?
答案 0 :(得分:2)
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节点。