您应该查看 execute_async_script() 方法(Java 中的 JavascriptExecutor.executeAsyncScript,.NET 中的 IJavaScriptExecutor.ExecuteAsyncScript()),它允许您等待回调函数。回调函数会自动附加到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);
可能会更聪明,将回调函数直接传递给返回正确数据的事件。您可以在项目JavaDocs中找到有关 executeAsyncScript() 函数的更多信息,并且可以在项目源代码树中找到这方面的示例代码。在此文件中的测试中有一个很好的示例,即等待 XHR 完成。
如果这在可用于 SauceLabs 的 Python 绑定版本中尚不可用,我希望它很快就会可用。诚然,从某种意义上说,这是将测试用例中的“期望状态轮询”推送到 JavaScript 中,但它会使您的测试更具可读性。