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那样快速点击!)
小智 6
自您回答此问题以来,一项新服务已经浮出水面,Ghost Inspector.无需编码的基于浏览器的UI测试.您可以选择在应用程序编辑器中执行手动步骤,也可以使用Ghost Inspector Chrome扩展程序记录您与正在测试的Web应用程序的交互.
Ghost Inspector还会在每次测试运行时录制视频,以便您可以准确查看测试代理浏览器看到的内容.有关于每个测试运行的详细日志,包括它在其路径上单击/访问的每个URL的列表.您可以使用触发器URL触发Ghost Inspector测试,以便将其集成到持续部署过程中.