我试图实现一个允许我等待任何正在运行的(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;');
});
不幸的是,我似乎没有必要的经验来让所有需要的元素一起工作,或者我可能只是在错误的轨道上并且有一个更好的解决方案。
答案 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