【问题标题】:Can I use phantom.js to test a javascript heavy application?我可以使用 phantom.js 来测试一个 javascript 繁重的应用程序吗?
【发布时间】:2013-11-27 13:03:57
【问题描述】:

目前,我正在使用 specflow、selenium、fluent 自动化和 xunit 的组合在 chrome 中部署的网站实例上测试我的浏览器应用程序。这在开发人员机器上运行良好,但在构建服务器代理上经常失败,除了构建服务器代理很慢之外没有明显的原因。

我一直在使用 phantom.js documentation 我很难理解是否可以使用 phantom.js 来完全测试我的应用程序。

我的应用程序有很多 javascript 逻辑,我使用 requirejs 来加载我的所有模块,我想知道是否可以使用 phantom 的无头浏览器功能来测试它的所有功能。它会下载所有 javascript 文件,然后允许我在 dom 上执行操作,例如启动其中包含表单的模式吗?许多 UI 都是使用淘汰模板构建的。

我已经进行了几次搜索,但没有找到任何确定的结果。有人对此有什么建议吗?在这一点上,我对跨浏览器测试并不那么在意,我们为此进行了手动 QA。这只是用于通过所有用户故事的 ui 自动化来实现功能失败的快乐路径预警系统。


最后,我做了一些非常有用的更改

  • 访问 selenium 驱动程序并检查 jQuery.active
  • 创建一个新的 expectOne/assertOne,如果 css 选择器为选择器返回多个项目,则会抛出异常

【问题讨论】:

  • 任何关于您在构建代理上使用 FluentAutomation 时遇到的问题的详细信息都会非常棒。我很想调查一下并尝试提供帮助。大多数情况下,问题与未启动/清理浏览器或未在 UI 会话中运行的测试有关,这可能会导致一些问题。

标签: jasmine phantomjs ui-automation acceptance-testing fluentautomation


【解决方案1】:

PhantomJs 是一个完整的浏览器实现,它只是不会呈现到屏幕上(它确实有一个可以通过屏幕截图捕获的缓冲区)。如果手动测试涵盖了首选浏览器,而您只需要知道硬故障,那就试一试吧!

FluentAutomation.SeleniumWebDriver 在当前版本中开箱即用地支持 PhantomJ。只需选择 PhantomJs 作为您的“浏览器”即可。 FluentAutomation.PhantomJs 提供程序已弃用并将消失。

FluentAutomation.SeleniumWebDriver.Bootstrap(FluentAutomation.SeleniumWebDriver.Browser.PhantomJs);

【讨论】:

    【解决方案2】:

    是的。

    您可能会发现CasperJS 对测试更有用。内置的测试器模块非常易于使用。 Casper 还使用 SlimerJS(用于 Gecko/Firefox 测试)打开,无需额外代码。

    在 Phantom 或 Casper 中,您可以使用 page.evaluate() 来运行任何客户端 JavaScript,这样应该没问题。

    【讨论】:

    • 我们每天早上使用 phantomjs/casperjs 在我们的 js 应用程序上运行一些测试。我们模拟复杂的工作流程并在每一步后截取屏幕截图。所以我们可以看到出了什么问题。但是有两件事:1.您必须对每一步都进行编码——这不是典型的 QA 任务;2.它不能替代单元测试——但单元测试也可以在 phantomjs 中运行;见厚脸皮……
    • @Andreas 同意这两点。为了更容易创建测试,您可以使用 FireBug。例如。我正在输入的这个评论栏的 CSS 选择器是 html body.question-page div.container div#content div div#mainbar div#answers div#answer-20261132.answer table tbody tr td div#comments-20261132.comments table tfoot tr td.comment-form form#add-comment-20261132 table tbody tr td textarea !!
    • 鉴于他已经在使用封装了 PhantomJS @Stirno 的 Fluent Automation 的答案可能是要走的路。这将需要重写他的整个测试套件,而stirno 的答案是一行更改。
    • @pauljz 我有点同意。我决定发帖是因为 OP 说“我们正在使用这个堆栈,但由于我们不知道的原因它不能正常工作”。使用 CasperJs 允许您使用不同的技术来缩小当前堆栈是否存在问题的范围。它还允许您交换 SlimerJS(即 Gecko),以查看 webkit 引擎是否存在问题。但我肯定会先尝试 stimo 的换行!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多