PHP webdriver espera a que Ajax termine de ejecutarse

Oct 29 2020

Simplemente quiero verificar que ajax ya no se esté ejecutando, pero no hay mucha documentación para esto.

La respuesta más cercana que encontré es: phpwebdriver selenium espera a ajax

Intenté adaptar el código en la respuesta a continuación:

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

Pero está devolviendo lo siguiente:

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

Probé variaciones de $ condition , pero sigue devolviendo lo mismo. Seguro que a otros les resultará útil esta solución, ya que ayudaría a determinar cuándo los contenedores de página terminaron de recargarse con nuevo contenido a través de Ajax o simplemente para poder confirmar cuándo javascript dejó de ejecutarse en la página usando php webdriver

Respuestas

1 OndrejMachulda Nov 04 2020 at 15:11

Si está haciendo solicitudes AJAX usando jQuery, puede usar esto:

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