selenium与HtmlUnit?

我试图更好地理解testing框架,并一直在研究selenium。 我之前使用过HTMLUnit ,主要是当我需要从网站或类似的东西上刮掉一些信息的时候。

在编写testing自动化的时候,Selenium和HTMLUnit的优缺点是什么? 在我看来Selenium比HTMLUnit设置起来要复杂得多,虽然同时还有一个Selenium的HTMLUnitDriver,我认为它的行为与HTMLUnit本身的行为完全相同。

Selenium显然提供了更强大的框架,它具有用于Parareltesting的Selenium RC,它也有不同的浏览器驱动程序可以使用 – 尽pipe当您使用浏览器驱动程序时,testing实际上会打开/closures浏览器应用程序而不是无头的。

可能是我不正确的理解selenium。 一些方向和指针将是伟大的!

在另一个说明 – 一个单独的问题 – 我也在做移动浏览器的自动化testing,我看到Selenium有一个IPhoneDriver ,但这不是一个无头testing,因为它需要实际的iOS模拟器。

有没有办法在移动网站上进行无头testing? 更改用户代理是否足够? 我已经看到了一些关于改变用户代理的post,这些代码似乎有自己的挑战,例如。 在Selenium RC中设置用户代理

非常感谢!

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

谈到并行testing,最好使用selenium电网。 seleniumRC和selenium网格的基本概念。 传统的硒装置硒网格设置硒网格:要求特定的环境 你可以在这里了解更多的细节

有关seleniumwebDriver的一些话:

Selenium 2.0中的主要新function是WebDriver API的集成。 WebDriver旨在提供更简单,更简洁的编程接口,同时解决Selenium-RC API中的一些限制。 开发Selenium-WebDriver是为了更好地支持dynamic网页,页面元素可能会改变,页面本身不会被重新加载。 WebDriver的目标是提供一个devise良好的面向对象API,为现代高级Web应用程序testing问题提供更好的支持。

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

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

WebDriver和Selenium-Server

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

  • 您正在使用Selenium-Grid将testing分布到多台机器或虚拟机(VM)上。
  • 您要连接到具有特定浏览器版本的远程机器,该机器不在当前机器上。
  • 您没有使用Java绑定(即Python,C#或Ruby),并且想要使用HtmlUnit Driver

Selenium-WebDriver的驱动程序 WebDriver是应写入testing的关键接口的名称,但有几个实现。 这些包括:

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

优点

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

缺点

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

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

深入研究webDriver的setUp看看这个

从HtmlUnit文档 : HtmlUnit不是一个通用的unit testing框架。 它特别是一种模拟浏览器以进行testing的方法,目的是在另一个testing框架(如JUnit或TestNG)中使用。

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

谈到移动自动化,Selenium也有iPhone驱动iPhone驱动维基文章和Android驱动Android驱动维基文章

另请参阅此演示文稿

不幸的是我不能给你我的工作经验评估移动驱动程序,因为我处理networking自动化(没有手机)。 也知道Cucumber (自动化工具)在移动自动装置中很受欢迎。 看到这个和这个 。

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

Selenium和HTMLUnit在概念上有些相似,但是Selenium更加成熟/强大,并且有更多的特性。

请注意,Selenium包含Firefox的录制(IDE)插件,它允许您loggingtesting以及本质上驱动浏览器的RC / WebDriver自动化框架。 两者可以一起使用,使testing创build非常容易。

我可以看到使用HTMLUnit的唯一好处是它占用的资源更less,因此您可以在更less的硬件上运行testing,但是Selenium的并行支持甚至不再是真的。

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

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