拦截水豚铬无头探访

时间:2018-07-13 14:24:27

标签: ruby rspec capybara google-chrome-headless rack-test

我们使用Capybara和Chrome Headless进行集成测试。我想编写一个linter,每次chrome浏览到另一个页面时,它都会检查HTML结构上的一些指标。然后,当某事不利于我们的短毛绒时,我会提出一个错误。

我们有一些没有javascript的测试,到目前为止,猴子补丁机架测试仍然有效:

ALTER TABLE score_mm ADD UNIQUE (quize_no, phone);

但是我在Capybara和/或Chrome Headless中还没有找到可以拦截响应并检查页面正文的方法。

页面更改时是否可以触发挂钩?还是Chrome提供了某种API,我可以从中获取每个请求的内容?还是代理是可行的解决方案?

2 个答案:

答案 0 :(得分:1)

这不可能直接用Capybara实现,因为它实际上不知道浏览器中发生的页面转换/请求,除非用户特别用visit启动它们。

使用puffing-billy之类的可编程代理来处理对被测应用的所有请求,这是一种可能的方式。如果您使用puffing-billy,则需要查看pass_request功能-https://github.com/oesmith/puffing-billy#in-your-tests-capybarawatir-对初始请求进行转发,然后对响应执行任何操作。

答案 1 :(得分:0)

我不会用HTML棉绒缠结水豚测试。目前看来,这似乎很明智,因为每次测试都可以免费获取URL列表,但是:

  • 每个URL可能会多次掉毛,因为经过了一些测试
  • 即使您正在测试的功能实际上还可以,因为HTML并不完美,您可能会失败。

您可能拥有类似于sitemap.xml的信息或所有可用URL的其他来源。我将用它来进行单独的检查,这很简单:请求URL,使响应更短。冲洗并重复。

如果仍然不确定,请尝试使用page.html并做类似的事情

expect(page.html).to pass_linter

https://github.com/teamcapybara/capybara#debugging

然后,您可以根据需要将其添加为每个around规范的type: :feature钩子。

编辑:这是让每个访问路径的另一种解决方法。只需解析服务器日志文件(例如cat log/devlopment.log | grep path)即可获得访问路径的完整列表:

method=POST path=/users/login format=html controller=SessionsController action=create
status=302 duration=256.82 view=0.00 db=52.29 location=http://0.0.0.0:3000/platform/admin/dashboard params={"utf8"=>"✓", "authenticity_token"=>"ubGnWKOq8gbUE5C/aK375QQn5DpjHarUYxHtBLglGe6Lr9Ie3O5XPq90k5gr/SZbIPoDiiasvY0mGlwhzD/MsQ==", "user"=>{"email"=>"alex-3d51048235c9d1a8@toptal.io", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"} uid=983 remote_ip=127.0.0.1 x_forwarded_for= x_request_id=                
method=GET path=/admin/dashboard format=html controller=XXX action=show status=200 duration=3285.54 view=1051.32 db=2016.87 params={} uid=983 remote_ip=127.0.0.1 x_forwarded_for= x_request_id=   

并将其用于棉绒。