Bjo*_*orn 9 javascript python selenium asynchronous selenium-webdriver
我知道我可以获得Selenium 2的webdriver来运行JavaScript并获得返回值,但是发生了很多异步的事情我想让JavaScript与Selenium交谈,而不是相反.我做了一些搜索,但没有找到这样的东西.人们通常只使用implicitly_wait?这似乎很可能失败,因为不可能计时一切?完美的例子是让Selenium知道XHR何时完成或异步动画具有未确定的执行时间.
这可能吗?我们在Saucelabs上使用Selenium 2和Python.
您应该查看execute_async_script()方法(Java中的JavascriptExecutor.executeAsyncScript,.NET中的IJavaScriptExecutor.ExecuteAsyncScript()),它允许您等待回调函数.回调函数会自动附加到argumentsJavaScript函数中的数组中.因此,假设您已经在页面上有一个等待所需条件的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);
Run Code Online (Sandbox Code Playgroud)
它可能更加聪明,并将回调函数直接传递给返回正确数据的事件.您可以在项目JavaDocs中找到有关executeAsyncScript()函数的更多信息,并可以在项目源代码树中找到此示例代码.有一个很好的例子,等待XHR在这个文件的测试中完成.
如果在可用于SauceLabs的Python绑定版本中尚未提供此功能,我希望它不久可用.不可否认,从某种意义上说,这是将测试用例中的"所需状态轮询"推向JavaScript,但它会使您的测试更具可读性.
| 归档时间: |
|
| 查看次数: |
3935 次 |
| 最近记录: |