47

我正在尝试更好地理解测试框架并一直在研究 Selenium。我以前使用过HTMLUnit,主要是当我需要从网站或类似网站上抓取一些信息时。

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

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

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

在另一个注意事项 - 一个单独的问题 - 我也在考虑在移动浏览器上进行自动化测试,我看到 Selenium 有一个IPhoneDriver,但这也不是无头测试,因为它需要实际的 iOS 模拟器。

无论如何在移动网站上进行无头测试?改变用户代理就足够了吗?我看过一些关于更改用户代理的帖子,这些帖子似乎有自己的挑战,例如。在 Selenium RC 中设置用户代理

非常感谢!

4

6 回答 6

70

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

说到并行测试,最好使用 selenium 网格。硒 RC 和硒网格的基本概念。 传统的硒设置 硒网格设置 selenium 网格:请求特定环境 您可以在此处了解更多详细信息

关于selenium webDriver 的一些话:

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-Server

您可能需要也可能不需要 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 Driver 这是目前最快最轻量级的WebDriver实现。顾名思义,这是基于 HtmlUnit。HtmlUnit 是一个基于 Java 的 WebBrowser 实现,没有 GUI。对于任何语言绑定(Java 除外),Selenium Server 都需要使用此驱动程序。

优点

  • 最快的 WebDriver 实现
  • 纯 Java 解决方案,因此它与平台无关。
  • 支持 JavaScript

缺点

  • 模拟其他浏览器的 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 的设置,请参阅

来自HtmlUnit 文档HtmlUnit 不是通用单元测试框架。它专门是一种模拟浏览器以进行测试的方法,旨在用于另一个测试框架,例如 JUnit 或 TestNG。

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

说到移动自动化,Selenium 还有一篇 iPhone Driver iPhone Driver wiki 文章 和 Android Driver Android Driver wiki 文章

另请参阅此演示文稿

不幸的是,当我处理网络自动化(非移动设备)时,我无法给你我对移动驱动程序的工作经验评估。也知道Cucumber(自动化工具)在移动自动机中很流行。看到这个这个

希望它现在对你来说更清楚一点=)

于 2012-10-10T17:28:04.730 回答
3

Selenium 和 HTMLUnit 在概念上有些相似,但 Selenium 更成熟/更强大,并且具有更多功能。

请注意,Selenium 包含用于 Firefox 的记录 (IDE) 插件,它允许您记录测试和本质上驱动浏览器的 RC/WebDriver 自动化框架。两者可以一起使用,使测试创建变得非常容易。

我可以看到使用 HTMLUnit 的唯一优势是它占用的资源更少,因此您可以在更少的硬件上运行测试,但是有了 Selenium 的并行支持,即使这不再是真的了。

于 2012-10-10T01:05:15.580 回答
2

在夜间从Jenkins运行测试时,您通常无法访问诸如 X11 或 Windows 之类的窗口系统来运行 Web 浏览器。因此,我看到了在这种情况下使用 HTMLUnit Web 驱动程序的好处,因为它不需要访问窗口系统。

于 2014-03-06T13:45:15.810 回答
1

我使用 Selenium WebDriver 进行自动化。有一种非常简单的方法可以使浏览器无头。只需应用 ChromeOptions (在我的情况下,其他 DriverOptions 可用) ChromeOptions("Headless")

使用选项或服务可以提供许多熟练的方法,作为另一个示例,这将阻止驱动程序/命令提示符窗口“出现”,因此它将保持“静默”且不暴露。 ChromeDriverServices(“静默”)

于 2018-12-20T10:40:45.700 回答
1

根据我的经验,HtmlUnit 在浏览自动化方面做得很好,但在处理 Javascript 时可能会出现一些问题。实际上,我遇到了一个案例,其中我无法使用 HtmlUnit 自动下载图像,不得不求助于 Selenium,它的表现超出了我的预期。该案例实际上是在一个SO 线程中注册的。

于 2020-02-17T20:50:20.413 回答
0

至少在 UX 系统中,您可以使用例如 Xvfb 并将浏览器指向该显示器以使其“无头”另见http://infiniteundo.com/post/54014422873/headless-selenium-testing-with-firefox-and- xvfb如何在 Xvfb 中运行 Selenium?

于 2015-04-22T15:54:18.637 回答