Usted debe mirar en el método execute_async_script() (JavascriptExecutor.executeAsyncScript en Java, IJavaScriptExecutor.ExecuteAsyncScript() en .NET), que le permite esperar a una función de devolución de llamada. La función de devolución de llamada se agrega automáticamente a la matriz arguments
en su función de JavaScript. Así, suponiendo que tiene una función de JavaScript que ya están en la página que espera hasta que la condición que desea, se puede hacer algo como lo siguiente (código Java a continuación, C# y el código Python deben ser similares):
String script = "var callback = arguments[arguments.length - 1];"
+ "callback(myJavaScriptFunctionThatWaitsUntilReady());";
driver.manage().timeouts().setScriptTimeout(15, TimeUnit.SECONDS);
((JavascriptExecutor)driver).executeAsyncScript(script);
Se podría ser posible ser aún más inteligente y pasar la función de devolución de llamada directamente a un evento que devuelve los datos adecuados. Puede encontrar más información sobre la función executeAsyncScript() en el proyecto JavaDocs, y puede encontrar un código de muestra para esto en el árbol fuente del proyecto. Hay un gran ejemplo de esperar que se complete un XHR en las pruebas en this file.
Si esto aún no está disponible en la versión de los enlaces de Python disponibles para usar con SauceLabs, esperaría que estuviera disponible en poco tiempo. Es cierto que, en cierto sentido, esto está impulsando la "encuesta del estado deseado" desde su caso de prueba a JavaScript, pero haría que su prueba sea más legible.
Estos son excelentes consejos, gracias. –