Skip to content
This repository

A Capybara driver for headless WebKit so you can test Javascript web apps

Octocat-spinner-32 bin Suppress the webkit_server Dock icon on Mac OS X. June 14, 2011
Octocat-spinner-32 gemfiles Bump selenium-webdriver dependency February 13, 2014
Octocat-spinner-32 lib Fix killing webkit_server on JRuby January 28, 2014
Octocat-spinner-32 spec This fixes a stderr redirection test on fast machines. The write pipe… February 13, 2014
Octocat-spinner-32 src Better failure when screenshot doesn't save February 06, 2014
Octocat-spinner-32 templates Split Command into more abstract Command and concrete SocketCommand July 08, 2012
Octocat-spinner-32 test Rewrite qInstallMsgHandler test in C++ November 10, 2013
Octocat-spinner-32 .gitignore Ignore .idea directory February 13, 2014
Octocat-spinner-32 .rspec Added rspec options February 24, 2011
Octocat-spinner-32 .travis.yml Qt 5 moved to ubuntu-sdk-team PPA February 13, 2014
Octocat-spinner-32 Appraisals Test Capybara Webkit against Capybara v2.1.0 April 09, 2013
Octocat-spinner-32 CONTRIBUTING.md Add Vagrant configuration. January 16, 2013
Octocat-spinner-32 GOALS Updated to reflect more complexity, adding some subjectivity in the p… July 09, 2012
Octocat-spinner-32 Gemfile Use secure RubyGems URL February 28, 2013
Octocat-spinner-32 Gemfile.lock Bump selenium-webdriver dependency February 13, 2014
Octocat-spinner-32 LICENSE Update LICENSE copyright year September 14, 2012
Octocat-spinner-32 NEWS.md Release capybara-webkit 1.1.1 December 24, 2013
Octocat-spinner-32 README.md Correct link for reporting crashes February 12, 2014
Octocat-spinner-32 Rakefile Fix build on Travis January 28, 2014
Octocat-spinner-32 Vagrantfile Add Vagrant configuration. January 16, 2013
Octocat-spinner-32 capybara-webkit.gemspec Lock capybara dependency to < 2.2 December 24, 2013
Octocat-spinner-32 extconf.rb Move code that compiles Webkit into separate file to support Ruby 1.9.2 April 15, 2011
Octocat-spinner-32 vagrant_setup.sh Add Vagrant configuration. January 16, 2013
Octocat-spinner-32 webkit_server.pro Rewrite qInstallMsgHandler test in C++ November 10, 2013
README.md

capybara-webkit

Build Status Code Climate

A capybara driver that uses WebKit via QtWebKit.

Qt Dependency and Installation Issues

capybara-webkit depends on a WebKit implementation from Qt, a cross-platform development toolkit. You'll need to download the Qt libraries to build and install the gem. You can find instructions for downloading and installing QT on the capybara-webkit wiki. capybara-webkit requires Qt version 4.8.

Windows Support

Currently 32-bit Windows will compile capybara-webkit. Support for Windows is provided by the open source community and Windows related issues should be posted to Stack Overflow.

Reporting Issues

Without access to your application code we can't easily debug most crashes or generic failures, so we've included a debug version of the driver that prints a log of what happened during each test. Before filing a crash bug, please see Reporting Crashes. You're much more likely to get a fix if you follow those instructions.

If you're having trouble compiling or installing, please check out the [wiki]. If you don't have any luck there, please post to Stack Overflow. Please don't open a Github issue for a system-specific compiler issue.

CI

If you're like us, you'll be using capybara-webkit on CI.

On Linux platforms, capybara-webkit requires an X server to run, although it doesn't create any visible windows. Xvfb works fine for this. You can setup Xvfb yourself and set a DISPLAY variable, or try out the headless gem.

Usage

Add the capybara-webkit gem to your Gemfile:

gem "capybara-webkit"

Set your Capybara Javascript driver to webkit:

Capybara.javascript_driver = :webkit

In cucumber, tag scenarios with @javascript to run them using a headless WebKit browser.

In RSpec, use the :js => true flag. See the capybara documentation for more information about using capybara with RSpec.

Take note of the transactional fixtures section of the capybara README.

If you're using capybara-webkit with Sinatra, don't forget to set

Capybara.app = MySinatraApp.new

Non-Standard Driver Methods

capybara-webkit supports a few methods that are not part of the standard capybara API. You can access these by calling driver on the capybara session. When using the DSL, that will look like page.driver.method_name.

console_messages: returns an array of messages printed using console.log

// In Javascript:
console.log("hello")
# In Ruby:
page.driver.console_messages
=> [{:source=>"http://example.com", :line_number=>1, :message=>"hello"}]

error_messages: returns an array of Javascript errors that occurred

page.driver.error_messages
=> [{:source=>"http://example.com", :line_number=>1, :message=>"SyntaxError: Parse error"}]

alert_messages, confirm_messages, prompt_messages: returns arrays of Javascript dialog messages for each dialog type

// In Javascript:
alert("HI");
confirm("Ok?");
prompt("Number?", "42");
# In Ruby:
page.driver.alert_messages
=> ["Hi"]
page.driver.confirm_messages
=> ["Ok?"]
page.driver.prompt_messages
=> ["Number?"]

resize_window: change the viewport size to the given width and height

page.driver.resize_window(500, 300)
page.driver.evaluate_script("window.innerWidth")
=> 500

cookies: allows read-only access of cookies for the current session

page.driver.cookies["alpha"]
=> "abc"

accept_js_confirms!: accept any Javascript confirm that is triggered by the page's Javascript

// In Javascript:
if (confirm("Ok?"))
  console.log("Hi");
else
  console.log("Bye");
# In Ruby:
page.driver.accept_js_confirms!
visit "/"
page.driver.console_messages.first[:message]
=> "Hi"

dismiss_js_confirms!: dismiss any Javascript confirm that is triggered by the page's Javascript

// In Javascript:
if (confirm("Ok?"))
  console.log("Hi");
else
  console.log("Bye");
# In Ruby:
page.driver.dismiss_js_confirms!
visit "/"
page.driver.console_messages.first[:message]
=> "Bye"

accept_js_prompts!: accept any Javascript prompt that is triggered by the page's Javascript

// In Javascript:
var a = prompt("Number?", "0")
console.log(a);
# In Ruby:
page.driver.accept_js_prompts!
visit "/"
page.driver.console_messages.first[:message]
=> "0"

dismiss_js_prompts!: dismiss any Javascript prompt that is triggered by the page's Javascript

// In Javascript:
var a = prompt("Number?", "0")
if (a != null)
  console.log(a);
else
  console.log("you said no"));
# In Ruby:
page.driver.dismiss_js_prompts!
visit "/"
page.driver.console_messages.first[:message]
=> "you said no"

js_prompt_input=(value): set the text to use if a Javascript prompt is encountered and accepted

// In Javascript:
var a = prompt("Number?", "0")
console.log(a);
# In Ruby:
page.driver.js_prompt_input = "42"
page.driver.accept_js_prompts!
visit "/"
page.driver.console_messages.first[:message]
=> "42"

header: set the given HTTP header for subsequent requests

page.driver.header 'Referer', 'https://www.thoughtbot.com'

Contributing

See the CONTRIBUTING document.

About

The capybara WebKit driver is maintained by Joe Ferris and Matt Horan. It was written by thoughtbot, inc with the help of numerous contributions from the open source community.

Code for rendering the current webpage to a PNG is borrowed from Phantom.js' implementation.

thoughtbot

The names and logos for thoughtbot are trademarks of thoughtbot, inc.

License

capybara-webkit is Copyright (c) 2010-2013 thoughtbot, inc. It is free software, and may be redistributed under the terms specified in the LICENSE file.

Something went wrong with that request. Please try again.