Vous devriez examiner la méthode execute_async_script() (JavascriptExecutor.executeAsyncScript en Java, IJavaScriptExecutor.ExecuteAsyncScript() en .NET), qui vous permet d'attendre une fonction de rappel. La fonction de rappel est automatiquement ajoutée à la méthode arguments
dans votre fonction JavaScript. Donc, en supposant que vous avez déjà une fonction JavaScript sur la page qui attend jusqu'à la condition que vous voulez, vous pourriez faire quelque chose comme ce qui suit (le code Java ci-dessous, le code C# et Python devrait être similaire) :
String script = "var callback = arguments[arguments.length - 1];"
+ "callback(myJavaScriptFunctionThatWaitsUntilReady());";
driver.manage().timeouts().setScriptTimeout(15, TimeUnit.SECONDS);
((JavascriptExecutor)driver).executeAsyncScript(script);
Il est possible d'être encore plus astucieux et de passer la fonction de rappel directement à un événement qui renvoie les données appropriées. Vous pouvez trouver plus d'informations sur la fonction executeAsyncScript() dans le projet JavaDocs Vous pouvez trouver un exemple de code pour cela dans l'arbre source du projet. Il existe un excellent exemple d'attente de la fin d'un XHR dans les tests de la page ce fichier .
Si cela n'est pas encore disponible dans la version des liaisons Python disponibles pour SauceLabs, je m'attends à ce que cela soit disponible d'ici peu. Certes, dans un sens, cela revient à pousser le "poll for desired state" de votre scénario de test vers JavaScript, mais cela rendrait votre test plus lisible.