等待所有ajax调用终止于selenium webdriverjs

时间:2015-11-18 20:31:11

标签: javascript jquery ajax selenium selenium-webdriver

我试图实现一个允许我等待任何正在运行的(jQuery)ajax调用终止于selenium webdriverjs测试环境的函数。 我目前的工作假设是我需要正确整合以下元素:

  • 使用WebDriver.wait实际等待条件
  • 使用$(document).ajaxStop(function () {...});确定是否所有ajax呼叫都已终止
  • 使用WebDriver.executeAsyncScript在浏览器中调用所需的JavaScript代码

我想象这样的事情:

const PREPARE_SCRIPT = 'window.ajax_running = false;
$(document).ajaxStart(function () {window.ajax_running = true;});
$(document).ajaxStop(function () {window.ajax_running = false;});';
driver.executeAsyncScript(PREPARE_SCRIPT)
driver.wait(function () {
   return driver.executeAsyncScript('return window.ajax_running === false;');
});

不幸的是,我似乎没有必要的经验来让所有需要的元素一起工作,或者我可能只是在错误的轨道上并且有一个更好的解决方案。

1 个答案:

答案 0 :(得分:0)

尝试使用executeScript(在同步模式下)。使用console.log进行调试(使用Chrome测试)。

官方javadoc下面: http://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/remote/RemoteWebDriver.html

以下是一个片段:

 driver.executeScript("window.ajax_running = true;");
 driver.executeScript("$(document).ajaxStart(function () 
       {console.log(\"ajaxStart\"); window.ajax_running = true;});");
 driver.executeScript("$(document).ajaxStop(function () 
       {console.log(\"ajaxStop\"); window.ajax_running = false;});");
 sysout(driver.executeScript("return window.ajax_running"));

HTH