Вам следует обратиться к методу execute_async_script () (JavascriptExecutor.executeAsyncScript в Java, IJavaScriptExecutor.ExecuteAsyncScript () в .NET), который позволяет ожидать функцию обратного вызова. Функция обратного вызова автоматически добавляется в массив arguments
в вашей функции JavaScript. Итак, предполагая, что у вас уже есть функция JavaScript на странице, которая ожидает желаемого условия, вы можете сделать что-то вроде следующего (код Java ниже, C # и код Python должны быть похожими):
String script = "var callback = arguments[arguments.length - 1];"
+ "callback(myJavaScriptFunctionThatWaitsUntilReady());";
driver.manage().timeouts().setScriptTimeout(15, TimeUnit.SECONDS);
((JavascriptExecutor)driver).executeAsyncScript(script);
Возможно, можно быть еще умнее и передать функцию обратного вызова непосредственно событию, которое возвращает правильные данные. Вы можете найти больше информации о функции executeAsyncScript () в проекте JavaDocs и найти пример кода для этого в дереве исходного кода проекта. В этом файле .
есть отличный пример ожидания завершения XHR.
Если это еще не доступно в версии привязок Python, доступных для использования с SauceLabs, я ожидаю, что она будет доступна в ближайшее время. По общему признанию, в некотором смысле это толкает «опрос на требуемое состояние» из вашего тестового примера в JavaScript, но это сделает ваш тест более читабельным.