Selenium 与 HtmlUnit? [关闭]

2024-05-17

我试图更好地理解测试框架并一直在研究 Selenium。我用过HTMLUnit http://htmlunit.sourceforge.net/以前,主要是当我需要从网站或类似网站上抓取一些信息时。

在编写测试自动化的背景下,Selenium 与 HTMLUnit 的优点/缺点是什么?在我看来,Selenium 的设置比 HTMLUnit 更复杂,尽管同时有一个用于 Selenium 的 HTMLUnitDriver,我认为它的行为方式与 HTMLUnit 本身完全相同?

Selenium 显然提供了更强大的框架,它有用于并行测试的 Selenium RC,它还有可以使用的不同浏览器驱动程序 - 尽管当您使用浏览器驱动程序时,测试实际上会打开/关闭浏览器应用程序,而不是无头。

可能是我没有正确理解硒。一些方向和指示会很棒!

另一方面 - 一个单独的问题 - 我也在考虑在移动浏览器上进行自动化测试,我发现 Selenium 有一个iPhone驱动程序 http://code.google.com/p/selenium/wiki/IPhoneDriver但这也不是无头测试,因为它需要实际的 iOS 模拟器。

有没有办法在移动网站上进行无头测试?更改用户代理就足够了吗?我看过一些关于更改用户代理的帖子,它们似乎有自己的挑战,例如。在 Selenium RC 中设置用户代理 https://stackoverflow.com/questions/4565250/set-user-agent-in-selenium-rc

多谢!


好吧,我会尝试详细解释差异。

Speaking about parallel testing, it better to use selenium grid. Basic concept of selenium RC and selenium grid. traditional selenium setup selenium grid setup selenium grid:Requesting a Specific Environment You can get into more details here http://selenium-grid.seleniumhq.org/how_it_works.html

关于的一些话硒网络驱动程序:

Selenium 2.0 中的主要新功能是 WebDriver API 的集成。 WebDriver 旨在提供更简单、更简洁的编程接口,并解决 Selenium-RC API 中的一些限制。 Selenium-WebDriver 的开发是为了更好地支持动态网页,其中页面元素可能会更改而无需重新加载页面本身。 WebDriver 的目标是提供一个设计良好的面向对象的 API,为现代高级 Web 应用程序测试问题提供改进的支持。

与 Selenium-RC 相比,WebDriver 如何“驱动”浏览器?

Selenium-WebDriver 使用每个浏览器对自动化的本机支持直接调用浏览器。如何进行这些直接调用以及它们支持的功能取决于您使用的浏览器。本章后面提供了有关每个“浏览器驱动程序”的信息。 对于熟悉 Selenium-RC 的人来说,这与您习惯的有很大不同。 Selenium-RC 对于每个支持的浏览器都以相同的方式工作。当浏览器加载时,它会将 javascript 函数“注入”到浏览器中,然后使用其 javascript 驱动浏览器内的 AUT。 WebDriver 不使用此技术。同样,它使用浏览器内置的自动化支持直接驱动浏览器。

WebDriver 和 Selenium 服务器

您可能需要也可能不需要 Selenium 服务器,具体取决于您打算如何使用 Selenium-WebDriver。如果您仅使用 WebDriver API,则不需要 Selenium-Server。如果您的浏览器和测试都在同一台机器上运行,并且您的测试仅使用 WebDriver API,那么您不需要运行 Selenium-Server; WebDriver将直接运行浏览器。 将 Selenium-Server 与 Selenium-WebDriver 结合使用有一些原因。

  • 您正在使用 Selenium-Grid 将测试分布到多个 机或虚拟机 (VM)。
  • 您想要连接到具有特定浏览器的远程计算机 您当前计算机上不存在的版本。
  • 您没有使用 Java 绑定(即 Python、C# 或 Ruby)并且 想要使用 HtmlUnit 驱动程序

Selenium-WebDriver 的驱动程序 WebDriver 是应编写测试的关键接口的名称,但有多种实现。这些包括:

HtmlUnit 驱动程序这是目前最快、最轻量级的 WebDriver 实现。顾名思义,这是基于 HtmlUnit 的。 HtmlUnit 是一个基于 java 的 Web 浏览器实现,没有 GUI。对于任何语言绑定(java 除外),Selenium 服务器都需要使用此驱动程序。

Pros

  • WebDriver 最快的实现
  • 一个纯 Java 解决方案,因此它是独立于平台的。
  • 支持JavaScript

Cons

  • 模拟其他浏览器的 JavaScript 行为(见下文)

HtmlUnit 驱动程序中的 JavaScript 流行的浏览器都不使用 HtmlUnit (Rhino) 使用的 JavaScript 引擎。如果您使用 HtmlUnit 测试 JavaScript,结果可能与这些浏览器有很大不同。 当我们说“JavaScript”时,我们实际上指的是“JavaScript 和 DOM”。尽管 DOM 是由 W3C 定义的,但每个浏览器在 DOM 的实现以及 JavaScript 与其交互的方式方面都有自己的怪癖和差异。 HtmlUnit 具有令人印象深刻的完整 DOM 实现,并且对使用 JavaScript 具有良好的支持,但它与任何其他浏览器没有什么不同:它有自己的怪癖以及与 W3C 标准和主要浏览器的 DOM 实现的差异,尽管它模仿其他浏览器的能力。 对于WebDriver,我们必须做出选择;我们是否启用 HtmlUnit 的 JavaScript 功能并冒着团队遇到仅在其中出现的问题的风险,或者我们是否禁用 JavaScript,因为知道有越来越多的网站依赖 JavaScript?我们采取了保守的方法,并且默认情况下在使用 HtmlUnit 时禁用了支持。随着 WebDriver 和 HtmlUnit 的每次发布,我们都会重新评估这一决定:我们希望在某个时候在 HtmlUnit 上默认启用 JavaScript。

要更深入地研究 webDriver 的设置,请参阅this http://seleniumhq.org/docs/03_webdriver.html#htmlunit-driver

From HtmlUnit 文档 http://htmlunit.sourceforge.net/: HtmlUnit 不是通用的单元测试框架。它是一种专门用于测试目的的模拟浏览器的方法,旨在在其他测试框架(例如 JUnit 或 TestNG)中使用。

So 总结Selenium和HtmlUnit的区别: HtmlUnit 是一个基于 java 的 Web 浏览器实现,没有 GUI and 一种出于测试目的模拟浏览器的方法 and Selenium-WebDriver 使用每个浏览器对自动化的本机支持直接调用浏览器。我们可以看到,HtmlUnit 提供了没有 GUI 自动化可能性的 API,而 WebDriver 提供了内部浏览器自动化的可能性。

谈到移动自动化, Selenium 还有一个 iPhone 驱动程序iPhone 驱动程序 wiki 文章 http://code.google.com/p/selenium/wiki/IPhoneDriver和安卓驱动程序Android 驱动程序 wiki 文章 http://code.google.com/p/selenium/wiki/AndroidDriver

也可以看看这个演示文稿 http://www.slideshare.net/operationmobile/automated-ui-testing-for-web-and-native-apps-on-ios-and-android-10261455

不幸的是,我无法向您提供我对移动驱动程序的工作经验评估,因为我处理网络自动化(无移动设备)。还知道Cucumber(自动化工具)在移动自动化设备中很受欢迎。 看this https://github.com/cucumber/cucumber/wiki and this http://rhburrows.com/2010/11/04/testing-mobile-sites-with-cucumber/.

希望你现在能更清楚一点=)

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

Selenium 与 HtmlUnit? [关闭] 的相关文章

随机推荐

  • C# 中 DLL 和命名空间的关系

    这里有一个高级问题 今天我花了很多时间自学基本的高级概念 例如 API 静态和动态库 DLL 以及 C 中的编组 获得所有这些知识让我想到了一个看起来非常基本的问题 并且可能表明我对这些概念的理解存在漏洞 我知道的 DLL 可能包含类 这些
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • ajaxStop() 不触发

    这是不起作用的代码 document ajaxStop function this unbind ajaxStop prevent running again when other calls finish Display everythi
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 如何使用 BeautifulSoup 从表中选择特定行?

    So I have a question related to a previous question but I realized I needed to go one level more to get an 11 digit NDC
  • Facebook iPhone SDK:上传图像时显示进度条

    我想在我的 iPhone 应用程序将图像上传到 Facebook 时显示进度条 是否可以 我可以对我发出的每个 FBRequest 执行此操作吗 我还使用 FBRequest 来检查扩展权限 有时需要花费很多时间 谢谢 对于进度条 您可以做
  • Service Fabric 有状态服务远程处理 V2

    我有一个由无状态服务调用的有状态服务 在 Visual Studio 15 4 上运行的 Net Standard Asp net Core 2 0 中 我无法使 Service Remoting V2 工作 适用于 V1 的有状态服务中的
  • 将文件从不同目录复制到公共目录

    我有很多目录 其中包含 c文件 我想复制全部 c使用 shell 脚本将不同目录中的文件复制到单个目录 find name c exec cp t tmp 启动当前目录中的所有项目 递归 获取名称结尾的项目 c 将这些项目复制到 tmp 如
  • 致命:.git/info/refs 无效:这是一个 git 存储库吗?

    我有一个托管在 Assembla 上的 Git 存储库 我正在尝试执行以下操作 git push u origin master 我一遍又一遍地收到以下错误 fatal https url repo name git info refs n
  • 如何引用下一行的数据?

    我正在 PostgreSQL 9 2 中编写一个函数 对于股票价格和日期的表 我想计算每个条目较前一天的百分比变化 对于最早一天的数据 不会有前一天 因此该条目可以简单地为 Nil 我知道WITH声明可能不应该高于IF陈述 到目前为止 这就
  • 是否可以将新表和旧表从触发器传递到 MySQL 中的过程中?

    是否可以将新表和旧表从触发器传递到 MySQL 中的过程中 我怀疑不会 因为没有过程接受的表这样的数据类型 有什么可能的解决方法吗 理想情况下它看起来像这样 CREATE TRIGGER Product log AFTER UPDATE O
  • 依赖注入来解决与运行时数据的依赖关系

    我正在为我的 Web api 项目使用简单的注入器 我有一项服务需要会话令牌才能实例化 public class CustomerService public CustomerService Auth auth IRepositoryFac
  • 将 transaction.commit_manually() 升级到 Django > 1.6

    我继承了为 Django 1 4 编写的应用程序的一些代码 我们需要更新代码库以使用 Django 1 7 并最终更新到 1 8 作为下一个长期支持版本 在一些地方它使用旧风格 transaction commit manually and
  • 如何使用 $resource 获取状态代码?

    我提出请求的工厂在这里 angular module myapp factory testResponse http resource AppConfig routeParams rootScope function http resour
  • 从 iOS 13 开始安排 iOS 后台任务

    我正在实现用于更新数据的BackgroundTasks 框架 但我遇到了以下问题 无法计划刷新App 错误域 BGTaskSchedulerErrorDomain代码 1 空 无法安排数据提取 Error Domain BGTaskSche
  • 在 Pandas 中,如何从基于另一个数据框的数据框中删除行?

    我有 2 个数据框 一个名为 USERS 另一个名为 EXCLUDE 他们都有一个名为 电子邮件 的字段 基本上 我想删除 USERS 中包含 EXCLUDE 中包含电子邮件的每一行 我该怎么做 您可以使用boolean indexing
  • 在 igraph 中为社区分配颜色

    我在 igraph 中使用 fastgreedy community 检测算法在 R 中生成社区 代码返回 12 个社区 但是在绘图时很难识别它们 因为它返回的图的颜色数量有限 我怎样才能用十二种不同的颜色绘制这个图表 l2 lt layo
  • 堆分配什么的语法?

    是否有语法 模板或函数允许我将任何值本质上转换为指向该值的指针 IE 将其复制到GC堆并返回指向它的指针 new 并不适用于所有类型 std experimental allocator 不适用于 ctfe 并且两者似乎都在指向委托时遇到了
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • Selenium 与 HtmlUnit? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我试图更好地理解测试框架并一直在研究 Selenium 我用过HTMLUnit http htmlun