Capybara 模拟真实用户交互 测试 Web 应用

636 查看

Capybara 通过模拟真实用户交互的方式来测试你的 web 应用。它内置 Rack::Test 和 Selenium 支持,也支持其他驱动。WebKit 通过外部 gem 的形式支持。

核心优势

  • 无需配置 对于 Rails 和 Rack 应用而言,开箱即用。
  • 符合直觉的 API 模拟真实用户行为。
  • 可替换后端 可以替换测试后端,例如从快速的 headless 模式切换到实际的浏览器,无需更改测试。
  • 强力同步 你不用手动等待异步过程结束。

配置

Capybara 需要 Ruby 1.9.3+。在 Gemfile 中添加以下一行,然后运行 bundle install

gem 'capybara'

Rails 应用可以在 helper 文件中加上这么一行:

require 'capybara/rails'

Rack 应用:

Capybara.app = MyRackApp

如果需要测试 javascript 或进行远程测试,还需要配置驱动。

Capybara 可以和 Cucumber、RSpec、Test::Unit、MiniTest::Spec配合使用。FIXME

Capybara 默认使用 RackTest 驱动,此外还支持 Selenium、Capybara-webkit、Poltergeist。

DSL

Capybara 的 DSL 十分易懂。我们来看几个例子吧:

访问:

visit('/projects')

点击链接或按钮:

click_link('id-of-link')
click_button('Save')

表单:

fill_in('First Name', :with => 'John')
fill_in('Password', :with => 'Seekrit')
fill_in('Description', :with => 'Really Long Text...')
choose('A Radio Button')
check('A Checkbox')
uncheck('A Checkbox')
attach_file('Image', '/path/to/image.jpg')
select('Option', :from => 'Select Box')

XPath

page.has_selector?(:xpath, '//table/tr')

查找

find_field('First Name').value
find('#navigation').click_link('Home')

部分驱动支持执行 JavaScript:

page.execute_script("$('body').empty()")
result = page.evaluate_script('4 + 4');

项目主页

http://jnicklas.github.io/capybara/

https://github.com/jnicklas/capybara


编撰 SegmentFault