首页 > 解决方案 > PHP webdriver 等待 Ajax 完成执行

问题描述

只是想检查 ajax 是否不再执行,但在这方面的文档并不多。

我找到的最接近的答案是: phpwebdriver selenium 等待 ajax

我试图在下面的答案中调整代码:

public function waitForAjaxComplete()
{

    $wait = new WebDriverWait($driver, 30);
    $wait->until(function(){
        $condition = 'arguments[0].call(null, $.active == 0)';
        if($driver->executeAsyncScript(array(
            'script' => $condition,
            'args' => array()
        ))
        )
            return true;
    }, 10000);
}

但它返回以下内容:

PHP Fatal error:  Uncaught Facebook\WebDriver\Exception\UnknownServerException: java.util.HashMap cannot be cast to java.lang.String in vendor/facebook/webdriver/lib/Exception/WebDriverException.php:114

我尝试了$condition的变体,但它一直返回相同的东西。当然其他人会发现这个解决方案很有用,因为它有助于确定页面容器何时通过 Ajax 完成重新加载新内容,或者只是能够使用 php webdriver 确认 javascript 何时停止在页面上执行

标签: seleniumselenium-webdriver

解决方案


如果您使用 jQuery 进行 AJAX 请求,则可以使用:

$driver->wait()->until(
    function ($driver) {
        return $driver->executeScript('return jQuery.active === 0;');
    }
);


推荐阅读