当页面上出现JavaScript错误时,如何在Capybara Webkit的功能测试中失败一步
How do I fail a step in a feature test with Capybara-Webkit when there is a JavaScript error on a page?
我在Ruby on Rails应用程序中使用Cucumber、Capybara和Capybara webkit来测试不同的场景。
有没有一种方法可以在场景运行时检测页面上的任何JavaScript错误并使测试失败?作为自动化测试运行的一部分,我们使用这些测试来确保不会在更改之间破坏功能(包括JavaScript)。
我可以在测试输出中看到失败,但它不会使测试失败:
http://127.0.0.1:54928/...|16|ReferenceError: Can't find variable: $
http://127.0.0.1:54928/...|16|ReferenceError: Can't find variable: $
...
谢谢!
更新:我发现的一种方法是有一个步骤,尝试执行一些只有在以前没有发生错误的情况下才可能执行的JavaScript。在这种情况下,我会得到这样的错误:
Javascript failed to execute (Capybara::Driver::Webkit::WebkitInvalidResponseError)
./features/step_definitions/....rb:19:in `/^I should not see any JavaScript errors$/'
features/....feature:34:in `Then I should not see any JavaScript errors'
有更好的方法吗?
是的,您可以使用page.driver.console_messages
访问所有控制台消息,或者使用page.driver.error_messages
只访问错误消息。
为了测试是否没有javascript错误,我建议使用以下方法:
Then /^I should see no Java'-Script errors$/ do
page.driver.error_messages.length.should == 0
end
附带说明:水豚网络工具包还包括一个匹配器:have_errors
,用于编写漂亮的page.should_not have_errors
。不幸的是,这似乎在当前版本中被打破了(至少对我来说是这样;另请参阅:https://github.com/thoughtbot/capybara-webkit/pull/201)
虽然收到JavaScript错误的通知偶尔会有所帮助,但您应该致力于测试实际的JavaScript行为。如果出现JavaScript错误,则应将其本身显示为失败场景。
capybara-webkit
在我们的环境中似乎总是有两条虚假消息。我试图尽可能具体地过滤掉这些,但以下是我们在检测到水豚webkit的javascript错误时自动失败的方法:
AfterStep do
if webkit?
real_error_messages = []
page.driver.error_messages.each_with_index do |e, i|
# first two messages appear to be bogus, always.
if (e[:line_number] == 0) && (e[:source].eql? 'undefined') && (e[:message].eql? 'TypeError: ''null'' is not an object') && i <= 1
# discard message
else
real_error_messages << e
end
end
raise "Javascript errors: #{real_error_messages}" if real_error_messages.length > 0
end
end
其中webkit?
为:
def webkit?()
[:webkit, :webkit_debug].include? Capybara.javascript_driver
end
这里的全部要点
运行每个步骤"显示页面"并检查web控制台的最佳方式。然后您可以将console.log放在您的代码中。您在其中为所选步骤执行操作。
- 在浏览器上显示实习运行程序功能测试的结果
- 实习生功能测试和清除 cookie 之前和之后
- 硒功能测试结构和实践
- 节点.js的基本功能测试
- 编写功能测试,HTML5 视频标签
- 间谍无法跟踪与摩卡和西农的异步功能测试
- 实习功能测试中的多个THEN语句
- 当页面上出现JavaScript错误时,如何在Capybara Webkit的功能测试中失败一步
- 检查javascript的功能测试
- 在实习生中进行功能测试时,使用辅助模块执行重复的、有序的任务
- 用javascript创建页面的Grails Gebish功能测试
- 使用AndroidDriver运行内部功能测试
- 如何在功能测试期间使用Intern报告JavaScript错误
- 如何对浏览器使用视频作为画布源的能力进行功能测试?
- 无法运行内部功能测试.错误:[POST http://localhost:4444/wd/hub/session] co
- 我们可以用javascript连接数据库进行功能测试吗?
- 如何将基于javascript的功能测试传递给服务器,并让服务器根据测试结果发送标记
- 使用internjs Framework进行功能测试的截图功能不起作用
- 功能测试覆盖报告,包括node-jscoverage, mocha和express
- 使用Nightwatch进行功能测试