151

我们正在使用 Selenium 来自动化我们的UI测试。最近我们看到我们的大多数用户都在使用 Chrome。所以我们想知道——使用 PhantomJS 和 Selenium 的优缺点:

  • 在性能方面是否有任何真正的优势,例如执行测试用例所花费的时间?
  • 什么时候应该更喜欢 PhantomJS 而不是 Selenium?
4

5 回答 5

184

他们正在解决不同的问题。由于 PhantomJS 在命令行上完美运行,它适合作为烟雾测试的第一层,无论是作为开发工作流程的一部分和/或在持续集成服务器中。Selenium 针对多个浏览器,因此确保跨浏览器的一致性和跨不同操作系统进行广泛的测试非常有用。

如果您的 Web 应用程序需要在各种 Web 浏览器上运行,仅使用 PhantomJS 运行 UI 测试不会产生最大的测试覆盖率。但是,在进行深入测试之前启动 PhantomJS 并进行一些基本的健全性检查是完全可以的。想象一下,在登录屏幕意外损坏且无法正常工作的情况下测试金融应用程序是多么疯狂!

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

于 2012-12-31T10:38:16.460 回答
50

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

这是非常强大的。

您可以在每次签入时通过您的 CI 在无头 Unix 服务器上运行一组全自动 Selenium 测试(使用 PhantomJS 作为 WebDriver 实现)。然后,如果您想测试浏览器兼容性,您可以通过将底层 WebDriver 实现更改为 Chrome、Firefox 等来在本地运行测试。

于 2013-01-16T12:06:54.363 回答
41

我目前正在编写一个网络提取框架。我有 524 个测试使用 XPath 从 250 个网站获取数据。最初该框架使用 HTML 解析器 HTMLCleaner,但我目前正在研究使用Selenium,因为我需要 Javascript 支持。我已经针对 HtmlUnit、Chrome、Firefox 和PhantomJS 驱动程序运行了测试。以下是每种方法所花费的时间和失败次数的比较:

                    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 时也存在问题,因为标签平衡算法似乎有问题。对此提出了一些问题,但尚未解决 - 请参阅HTML-UNIT 1423HTML-UNIT 1046

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

  • PhantomJS 比 Firefox 实现了更好的准确性,略低于 Chrome,但大约是 Firefox 的一半时间。更重要的是,我可以在我的开发盒上运行它,它不会通过启动多个浏览器来“接管我的机器”,这样我就可以继续工作了。

我强烈推荐 PhantomJS。

于 2013-08-23T03:33:25.900 回答
2

利用 Selenium 和 PhantomJS 的强大 功能 PhantomJS 具有无头浏览器功能,因此最好将其用作具有 selenium 的浏览器之一(除了 IE、Chrome 等传统浏览器之外)这种方法的优点:

  1. 可用于在 CI 中对 Web 应用程序进行 Sanity(即使代理机器没有 IE 或 chrome),测试将有效运行。
  2. 一些开发团队使用这种方法来获得快速的结果并消耗更少的时间和资源。
  3. phantom JS 最大的特点是屏幕截图,使用多线程运行并行测试,这将大大减少你的执行时间。
于 2017-04-11T06:13:08.527 回答
2

我在使用 PhantomJS 时遇到的挑战:

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

  1. 在某些时候,在 chrome 浏览器上运行良好的定位器在 phantomJS 上不起作用。
  2. 有时,在通过 selenium 执行双击或上下文单击时,我必须进行额外检查以验证操作,因为首先它没有单击。
  3. 缓存和 cookie 的持久性。注销后再登录后,数据仍保留在缓存中。| 所以我们在chrome上进行测试。
  4. 我发现“文件上传问题”的最重要问题之一。我们无法在应用程序的 phantomJs 浏览器中上传文件。我们尝试了很多 javascriptexcutor、jqueries 的东西,但它们都没有奏效。所以我们也在 Chrome 上进行了这个测试。注意:我们在框架中广泛使用了 javascript 函数来与 PhantomJS 的 web 元素进行交互。一件事是肯定的执行时间在 PhantomJS 中非常少。所以这取决于客户的优先级,他是否想要功能/性能然后去。如果您想测试端到端场景,请选择 chrome。
于 2017-07-28T12:00:33.677 回答