当浏览器忙于执行一些长时间运行的 JavaScript 时,WebDriver API 阻塞行为

2024-03-29

我在文档中的某个地方读到 WebDriver API 是非阻塞的(除了一些像 driver.get 的 API)。因此,执行 WebElement click() 或 isDisplayed() 通常应该是异步的(当然,假设启用了本机事件)。

我有一个简单的 HTML 页面,它执行一个长操作(基本上是一个长循环)。当 JS 执行时,浏览器没有响应,这是预料之中的。但我也注意到,只要浏览器忙于执行脚本,WebDriver API 就会像 click()/isDisplayed()/executeScript() 块一样。

由于 WebDriver 发出的是一个原生的点击事件,而不是一个合成的 JS 事件,我很困惑为什么 API 会阻塞。虽然目前这种行为并没有困扰我,但我想知道在对无响应的页面运行测试时是否可以依赖这种阻塞性质?我在测试中确实使用了条件等待,但想了解幕后发生的情况以及这是否特定于浏览器/操作系统?

我在 Windows 7 上使用 InternetExplorerDriver (IE9) 和 ChromeDriver (Chrome 19) 的 Selenium 2.20.0 中看到了这种行为。


实际上,阻塞 API 与非阻塞 API 的使用是许多 Selenium 库用户争论的焦点。在很多地方,库都会进行“最佳猜测”尝试来阻止,甚至在元素点击时也是如此,但这并不能保证。阻塞和非阻塞之间的这种张力已经详细讨论 https://groups.google.com/forum/?fromgroups#!topic/selenium-developers/WuqiU7cKOTk在开发者社区中,反映在常见问题解答之一 http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions#Q%3a_WebDriver_fails_to_find_elements_/_Does_not_block_on_page_loa在项目维基中。对于 IE,驱动程序确实会尝试阻止元素点击,并且无论是否成功阻止,这都是一个竞争条件。对于您的特定页面,IE 驱动程序(显然还有 Chrome)正在“赢得”这场比赛,并阻塞直到操作完成。但是,在其他情况下,驱动程序也可能很容易输掉比赛,因此最好在继续代码中的下一步之前使用显式等待其他页面更改。

如果将来出现问题,您可以通过设置页面加载超时 http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html#pageLoadTimeout%28long,%20java.util.concurrent.TimeUnit%29提前转到下一个声明。这种方法的一个小挑战是,目前并非所有浏览器都可以实现超时(IE 可以,我不知道 Chrome 是否可以)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当浏览器忙于执行一些长时间运行的 JavaScript 时,WebDriver API 阻塞行为 的相关文章

随机推荐

  • 具有相同范围和离线 access_type 的第二次授权具有意外的权限对话框

    如果我在身份验证 URL 中指定 access type offline 并且用户尝试第二次身份验证 我会收到一个框 显示正在请求离线访问 我本以为它已经被授权 所以不需要额外的权限 有任何想法吗 Edit 更多信息 第一次它没有提到用户需
  • 如何在等高线图上绘制具有条件的数组?

    我使用下面的代码绘制了 GPP 的全球地图 lon 和 lat 都是 netCDF4 属性 形状分别为 144 和 90 而 gpp avg 是一个 numpy 数组 形状为 90 144 import numpy as np import
  • 如何:使用 maven2 进行数据库版本控制?

    我正在寻找任何用于版本控制数据库更改的 Maven 插件 有一些插件为此任务提供一些支持 Maven LiquiBase 插件 http www liquibase org manual maven Maven 数据库迁移插件 http c
  • .Rmd 文件打开时完全是空的

    在 RStudio 3 3 2 中打开 rmd 文件时 它们显示为完全空的 如果我使用记事本打开或在另一台计算机上打开 则会有文本 到底是怎么回事 有问题的 RMD 文件 https drive google com open id 0B
  • iOS - 恢复自动续订订阅

    我正在实施自动更新订阅 我有以下问题 订阅内容过期后 用户还能恢复吗 如果是这样 我如何验证它们并让它们下载 Look at 恢复自动续订订阅 https developer apple com library ios documentat
  • 模板类中的模板函数

    我有这个代码 template
  • 继续断言测试用例

    上次我使用 testcafe 时 我意识到这个伟大框架中缺少我的功能 该功能类似于 尽管出现了断言 但仍继续执行特定测试的其余部分 更准确地说 我描述了我缺少此类功能的原因 假设您正在测试 Web 应用程序 例如要在其中输入合同日期的 We
  • 正则表达式 - 时间验证 ((h)h:mm)

    d 1 2 0 5 0 9 是我所拥有的 这将分钟限制为 00 59 然而 它并不将时间限制在 0 到 12 之间 为了相似性和统一性 如果可能的话 我想单独使用 RegEx 来完成此操作 此外 我希望第一个数字是可选的 即接受 09 30
  • 如何在单独的dll项目中配置WCF

    我正在开发一个 Web 应用程序 ASP NET 3 5 它将使用许多 Web 服务 我为每个 Web 服务创建了一个单独的 dll 项目 这些项目包含服务引用和客户端代码 但是 调用网站必须具有
  • 检查字符串是否包含日文/中文字符

    我需要一种方法来检查字符串是否包含Japanese or Chinese text 目前我正在使用这个 string match u3400 u9FBF 但它不适用于以下示例 or 你能帮我吗 Thanks 通常用于中文和日文文本的 Uni
  • redirect_uri 的参数值无效

    当我尝试通过网络在 Google Plus 中验证我的应用程序时 出现错误 错误 无效 请求 redirect uri 的参数值无效 缺少权限 MY APP oauth2callback 我按照说明做了一切 https developers
  • 如何 git svn 仅获取具有特定模式的分支/标签?

    我想使用 git svn 查看 Boost 库 并且只想查看从版本 1 35 开始的主干和标签 即 tags release Boost 1 35 及更高版本 我的配置如下 svn remote svn ignore paths tags
  • MonoTouch.Dialog:UISearchBar 颜色

    在 3 月 31 日发布的 MonoTouch Dialog 中 我们无法设置UISearchBar现在不再这样了 因为有一个带有硬编码颜色的新容器对象 有没有更简单的方法来改变颜色UISearchBar 作为解决方法 我使用它 知道 UI
  • 无法更改样式:使用 getelementsbyclassname 显示

    document getElementByClassName xyz style display none 我无法隐藏课程内容 document getElementsByClassName返回一个类似数组的对象 您可以为此使用以下脚本 d
  • 如何减少Flutter的build_runner构建时间

    我的项目变得非常大 每次运行 build runner 都会花费太多时间来构建 我减少构建时间的想法是仅构建实际需要构建的文件 这些文件是我当前功能目录的文件 有没有办法只为单个文件夹或单个文件运行 build runner 您可以在 bu
  • Android 中的语音通话录音应用

    我想做一个录音通话的应用程序 可以吗 我期待 Android 领域经验丰富的人提供一些适当的指导 我在android中看到了android media MediaRecorder类 我需要使用那个类吗 感谢致敬 帕瓦蒂 卡玛隆 抱歉 开发人
  • 右值到左值转换 Visual Studio

    在 Visual Studio 2012RC 中存在一些非标准扩展 例如这段代码编译 include
  • Puppeteer:从使用延迟加载的页面中抓取整个 html

    我正在尝试获取使用延迟加载的网页上的整个 html 我尝试过的是一直滚动到底部 然后使用 page content 我还尝试在滚动到底部后滚动回页面顶部 然后使用 page content 两种方法都会抓取表格的一些行 但不是全部 这是我的
  • ActionBar.Tab 类型已弃用

    我正在尝试在 Eclipse 中创建滑动选项卡 但是当我导入时android app ActionBar Tab 它警告我导入 ActionBar Tab 类型已弃用 它使我的大部分代码成为警告并删除它 import android sup
  • 当浏览器忙于执行一些长时间运行的 JavaScript 时,WebDriver API 阻塞行为

    我在文档中的某个地方读到 WebDriver API 是非阻塞的 除了一些像 driver get 的 API 因此 执行 WebElement click 或 isDisplayed 通常应该是异步的 当然 假设启用了本机事件 我有一个简