基于浏览器的测试工具哪个没破?

Ale*_*x D 12 javascript testing selenium unit-testing

对不起有争议的标题在这里!

我已经使用Selenium和基于Selenium的库(如Capybara)完成了一些基于浏览器的测试(JS重型网页).让测试套件始终如一地工作一直是一个巨大的痛苦.是的,我知道不是在sleep()这里和那里插入调用,而是应该等待DOM元素变得可见,或者满足其他条件,yadda yadda.这一切都很好,而且确实有所帮助.我认为我做得不对,如果不是......

如果不是时候,在我自己编写Selenium代码之前,当我咨询的公司聘请了一家专门编写Selenium测试套件的公司.他们派了一个据说是Selenium专家的人,他为我们的网络应用程序编写了一个完整的测试套件.我需要告诉你我们实际使用测试套件时发生了什么?

我已经得出结论,像Selenium这样的工具使用的整个方法受到了很大的竞争条件.您有一个测试过程,以及一个通过套接字进行通信的独立浏览器进程.测试过程向浏览器发送查询以找出DOM的状态,并在浏览器继续运行时计算要执行的操作.然后它向浏览器发送单独的消息以模拟点击或按键等.

如果您曾经编写过多线程程序,那么就知道它不起作用.这是一场"检查然后行动"的比赛.如果测试过程可以冻结浏览器中的JS执行,查询其状态,发出模拟的点击/击键,然后解冻浏览器,那么就可以了.(比如使用锁来保护多线程程序的关键部分.)

我能想到绕过竞争条件的唯一方法是用JS编写每个测试用例.当然,这排除了跨多个页面导航的测试用例.您还需要一种在每个测试用例开始时将页面重置为"干净"状态的方法.

有没有人知道用于测试浏览器内JS"应用程序"的工具/方法,它允许像我一样的凡人编写测试套件,这些测试套件一直运行100%而不会撕掉我的所有头发?

(PS.从Selenium的经验中获得的另一个结论:许多免费的jQuery插件都有错误,这些错误在人类使用页面时不会出现,只是因为它们无法像Selenium那样快速点击!)

jed*_*ans 6

您是否看过casperjs,它可以在phantomjs(无头webkit浏览器)或slimerjs(无头壁虎浏览器)之上运行?

单元测试语法是干净的,友好的,它在浏览器中依次的上下文中执行你的测试,使用一个名为evaluate()方法.


小智 6

自您回答此问题以来,一项新服务已经浮出水面,Ghost Inspector.无需编码的基于浏览器的UI测试.您可以选择在应用程序编辑器中执行手动步骤,也可以使用Ghost Inspector Chrome扩展程序记录您与正在测试的Web应用程序的交互.

Ghost Inspector还会在每次测试运行时录制视频,以便您可以准确查看测试代理浏览器看到的内容.有关于每个测试运行的详细日志,包括它在其路径上单击/访问的每个URL的列表.您可以使用触发器URL触发Ghost Inspector测试,以便将其集成到持续部署过程中.