Casperjs / PhantomJs对Selenium

我们使用Selenium来自动化UItesting。 最近我们看到大部分用户使用Chrome。 所以我们想知道 – 使用PhantomJS vs Selenium的优缺点:

  • 在性能方面是否有任何真正的优势,例如执行testing用例的时间?
  • 什么时候应该selectPhantomJS而不是Selenium?

他们正在攻击不同的问题。 由于PhantomJS在命令行上完美运行,无论是作为开发工作stream程的一部分和/或持续集成服务器,它都适合作为第一层烟雾testing。 Selenium以多个浏览器为目标,因此确保跨浏览器的一致性并在不同的操作系统上进行大量的testing非常有用。

如果您的Web应用程序需要在各种Web浏览器上运行,仅使用PhantomJS运行UItesting将不会产生最大的testing覆盖率。 然而,在进行深入testing之前,启动PhantomJS并进行一些基本的理性检查是完全正确的。 想象一下,在login屏幕被无意中破坏和无法使用的情况下,testing一个财务应用程序的疯狂行为!

请注意,最近PhantomJS中最近的WebDriver支持,两者之间的界限有些模糊。 现在可以先使用PhantomJS快速运行testing,然后(假设没有遇到严重错误)继续在Selenium设置中执行相同的testing。

最近的WebDriver集成(正如Ariya所说),现在可以使用Selenium来驱动PhantomJS。

这是非常强大的。

您可以在每一次登机时通过无人Unix服务器上的configuration项运行一系列全自动Seleniumtesting(使用PhantomJS作为WebDriver实现)。 那么如果你想testing浏览器的兼容性,你可以在本地运行你的testing,把底层的WebDriver实现改成Chrome,Firefox等等。

我目前正在编写一个Web抽取框架。 我有524个testing,使用XPath从250个网站获取数据。 最初框架使用HTMLparsing器,HTMLCleaner,但我目前正在调查使用selenium因为我想JavaScript的支持。 我已经对HtmlUnit,Chrome,Firefox和PhantomJS驱动程序运行testing。 下面是每种方法所花费的时间和失败次数的比较:

  Failures Time (secs) HtmlCleaner 0 82 HtmlUnit 169 102 Google Chrome 38 562 Firefox 46 1159 PhantomJS 40 575 

一些评论:

  • 在某些情况下,“失败”可能根本就不是失败,因为JavaScript正在重写DOM,所以提取器可能会失败。 我正在分析失败的原因。

  • 这就是说,HtmlUnit是最快的Selenium驱动程序,但它也是不可靠的。 这种不可靠性不仅仅涉及Javascript,在处理“凌乱,肮脏,现实世界”HTML时也有问题,因为在标签平衡algorithm中似乎有些东西被破坏了。 已经提出了一些关于这个问题的问题,但是它们还没有被修复 – 参见HTML-UNIT 1423和HTML-UNIT 1046 。

  • Firefox是最慢的selenium驱动程序,即使我禁用图像加载和样式表。 这是因为它加载和初始化速度最慢,比Chrome慢得多,并且每次提取失败时,我都需要重新加载驱动程序(在testing中,我创build了一个包含5个驱动程序的池,以减轻所有url的URL检索延迟Seleniumnetworking驱动程序)。

  • PhantomJS的实现比Firefox更精确,略低于Chrome,但在Firefox的一半左右。 更重要的是,我可以在我的开发箱上运行它,它不会通过启动多个浏览器来“接pipe我的机器”,所以我可以继续工作。

我会强烈推荐PhantomJS。

利用Selenium和PhantomJS的强大functionPhantomJS具有无头浏览器的function,因此将它作为带有selenium的浏览器之一(除IE,Chrome等传统浏览器之外)是一个很好的select。这种方法的优点:

  1. 可以用于CI中web应用程序的安全性(即使代理机器没有IE或Chrome),testing将会有效运行。
  2. 一些开发团队使用这种方法来获得快速的结果,并消耗更less的时间和资源。
  3. 幻影JS的最大特点是屏幕截图,使用multithreading运行并行testing,这将极大地缩短您的执行时间。

使用PhantomJS时遇到的挑战:

我的应用程序定价Web应用程序:

  1. 在某些时候,在Chrome浏览器上工作正常的定位器不能在phantomJS上工作。
  2. 有时在执行双击或上下文点击selenium时,我不得不放在validation操作,因为它没有点击第一个地方额外的检查。
  3. caching和Cookie持久性。 在注销之后,login数据保留在caching中。 | 所以我们对chrome进行testing。
  4. 我发现最重要的问题之一是“file upload问题”。 在我们的应用程序中,我们不能在phantomJs浏览器中上传文件。 我们尝试了很多javascriptexcutor,jquery,但他们都没有工作。 所以我们也在Chrome上执行这个testing。 注意:我们在我们的框架中广泛使用了javascript函数来与PhantomJS的web元素进行交互。 有一点可以肯定,PhantomJS的执行时间非常less。 所以这要取决于客户的优先级,他是否希望function/性能随之而来。 如果你想testing端到端的情况,然后去铬。