O driver da web PHP espera pelo Ajax terminar de executar

Oct 29 2020

Quero apenas verificar se o ajax não está mais em execução, mas não há muito em termos de documentação para isso.

A resposta mais próxima que encontrei é: phpwebdriver selenium aguarde ajax

Tentei adaptar o código na resposta abaixo:

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);
}

Mas está retornando o seguinte:

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

Tentei variações de $ condition , mas continua retornando a mesma coisa. Claro que outras pessoas achariam esta solução útil, pois ajudaria a determinar quando os contêineres de página terminaram de recarregar com novo conteúdo via Ajax ou simplesmente para ser capaz de confirmar quando o javascript parou de ser executado na página usando o php webdriver

Respostas

1 OndrejMachulda Nov 04 2020 at 15:11

Se estiver fazendo solicitações AJAX usando jQuery, você pode usar isto:

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