# Version 2.2.1 Release date: 2014-01-06 ### Fixed * Reverted a change in 2.2.0 which navigates to an empty file on `reset`. Capybara, now visits `about:blank` like it did before. [Jonas Nicklas] # Version 2.2.0 Release date: 2013-11-21 ### Added * Add `go_back` and `go_forward` methods. [Vasiliy Ermolovich] * Support RSpec 3 [Thomas Holmes] * `has_button?`, `has_checked_field?` and `has_unchecked_field?` accept options, like other matchers. [Carol Nichols] * The `assert_selector` and `has_text?` methods now support the `:wait` option [Vasiliy Ermolovich] * RackTest's visible? method now checks for the HTML5 `hidden` attribute. * Results from `#all` now delegate the `sample` method. [Phil Lee] * The `set` method now works for contenteditable attributes under Selenium. [Jon Rowe] * radio buttons and check boxes can be filtered by option value, useful when selecting by name [Jonas Nicklas] * feature blocks can be nested within other feature blocks in RSpec tests [Travis Gaff] ### Fixed * Fixed race conditions causing stale element errors when filtering by text. [Jonas Nicklas] * Resetting the page is now synchronous and navigates to an empty HTML file, instead of `about:blank`, fixing hanging issues in JRuby. [Jonas Nicklas] * Fixed cookies not being set when path is blank under RackTest [Thomas Walpole] * Clearing fields now correctly causes change events [Jonas Nicklas] * Navigating to an absolut URI without trailing slash now works as expected under RackTest [Jonas Nicklas] * Checkboxes without assigned value default to `on` under RackTest [Nigel Sheridan-Smith] * Clicks on buttons with no form associated with them are ignored in RackTest instead of raising an obscure exception. [Thomas Walpole] * execute_script is now a session method [Andrey Botalov] * Nesting `within_window` and `within_frame` inside `within` resets the scope so that they behave like a user would expect [Thomas Walpole] * Improve handling of newlines in textareas [Thomas Walpole] * `Capybara::Result` delegates its inspect method, so as not to confuse users [Sam Rawlins] * save_page always returns a full path, fixes problems with Launchy [Jonas Nicklas] * Selenium driver's `quit` method does nothing when browser hasn't been loaded [randoum] * Capybara's WEBRick server now propertly respects the server_host option [Dmitry Vorotilin] * gemspec now includes license information [Jonas Nicklas] # Version 2.1.0 Release date: 2013-04-09 ### Changed * Hard version requirement on Ruby >= 1.9.3. Capybara will no longer install on 1.8.7. [Felix Schäfer] * Capybara no longer depends on the `selenium-webdriver` gem. Add it to your Gemfile if you wish to use the Selenium driver. [Jonas Nicklas] * `Capybara.ignore_hidden_elements` defaults to `true`. [Jonas Nicklas] * In case of multiple matches `smart` matching is used by default. Set `Capybara.match = :one` to revert to old behaviour. [Jonas Nicklas]. * Options in select boxes use smart matching and no longer need to match exactly. Set `Capybara.exact_options = false` to revert to old behaviour. [Jonas Nicklas]. * Visibility of text depends on `Capybara.ignore_hidden_elements` instead of always returning only visible text. Set `Capybara.visible_text_only = true` to revert to old behaviour. [Jonas Nicklas] * Cucumber cleans up session after scenario instead. This is consistent with RSpec and makes more sense, since we raise server errors in `reset!`. [Jonas Nicklas] ### Added * All actions (`click_link`, `fill_in`, etc...) and finders now take an options hash, which is passed through to `find`. [Jonas Nicklas] * CSS selectors are sent straight through to driver instead of being converted to XPath first. Enables the use of some pseudo selectors, such as `invalid` in some drivers. [Thomas Walpole] * `Capybara.asset_host` option, which inserts a `base` tag into the page on `save_and_open_page`, eases debugging with the Rails asset pipeline. [Steve Hull] * `exact` option, can specify whether to match substrings or entire text. [Jonas Nicklas] * `match` option, can specify behaviour in case of multiple matches. [Jonas Nicklas] * `wait` option, can specify how long to wait for a given action/finder. [Jonas Nicklas] * Config option which disables bubbling of errors raised inside server. [Jonas Nicklas] * `text` now takes a parameter which makes it possible to return either all text or only visible text. The default depends on `Capybara.ignore_hidden_elements`. `Capybara.visible_text_only` option is available for compatibility. [Jonas Nicklas] * `has_content?` and `has_text?` now take the same count options as `has_selector?` [Andrey Botalov] * `current_scope` is now public API, returns the current element when `within` is used. [Martijn Walraven] * `find("input").disabled?` returns true if a node is disabled. [Ben Lovell] * Find disabled fields and buttons with `:disabled => false`. [Jonas Nicklas] * `find("input").hover` moves the mouse to the element in supported drivers. [Thomas Walpole] * RackTest driver now support `form` attribute on form elements. [Thomas Walpole] * `page.title` returns the page title. [Terry Progetto] * `has_title?` matcher to assert on page title. [Jonas Nicklas] * The gem is now signed with a certicficate. The public key is available in the repo. [Jonas Nicklas] * `:select` and `:textarea` are valid options for the `:type` filter on `find_field` and `has_field?`. [Yann Plancqueel] ### Fixed * Fixed race conditions when synchronizing across multiple nodes [Jonas Nicklas] * Fixed race conditions in deeply nested selectors [Jonas Nicklas] * Fix issue with `within_frame`, where selecting multiple nested frames didn't work as intended. [Thomas Walpole] * RackTest no longer fills in readonly textareas. [Thomas Walpole] * Don't use autoload to load files, require them directly instead. [Jonas Nicklas] * Rescue weird exceptions when booting server [John Wilger] * Non strings are now properly cast when using the maxlength attribute [Jonas Nicklas] # Version 2.0.3 Release date: 2013-03-26 * Check against Rails version fixed to work with Rails' master branch now returning a Gem::Version [Jonas Nicklas] * Use posix character class for whitespace replace, solves various encoding problems on Ruby 2.0.0 and JRuby. [Ben Cates] # Version 2.0.2 Release date: 2012-12-31 ### Changed * Capybara no longer uses thin as a server if it is available, due to thread safety issues. Now Capybara always defaults to WEBrick. [Jonas Nicklas] ### Fixed * Suppress several warnings [Kouhei Sutou] * Fix default host becoming nil [Brian Cardarella] * Fix regression in 2.0.1 which caused node comparisons with non node objects to throw an exception [Kouhei Sotou] * A few changes to the specs, only relevant to driver authors [Jonas Nicklas] * Encoding error under JRuby [Piotr Krawiec] * Ruby 2 encoding fix [Murahashi Sanemat Kenichi] * Catch correct exception on server timeout [Jonathan del Strother] # Version 2.0.1 Release date: 2012-12-21 ### Changed * Move the RackTest driver override with the `:respect_data_method` option enabled from capybara/rspec to capybara/rails, so that it is enabled in Rails projects that don't use RSpec. [Carlos Antonio da Silva] * `source` is now an alias for `html`. RackTest no longer returns modifications to `html`. This basically codifies the behaviour which we've had for a while anyway, and should have minimal impact for end users. For driver authors, it means that they only have to implement `html`, and not `source`. [Jonas Nicklas] ### Fixed * Visiting relative URLs when `app_host` is set and no server is running works as expected. [Jonas Nicklas] * `fill_in` works properly under Selenium again when the caret is not at the end of the field before the method is called. [Douwe Maan, Jonas Nicklas, Jari Bakken] * `attach_file` can once again be given a Pathname [Jake Goulding] # Version 2.0.0 Release date: 2012-11-05 ### Changed * Dropped official support for Ruby 1.8.x. [Jonas Nicklas] * `respect_data_method` default to `false` for the RackTest driver in non-rails applications. That means that Capybara no longer picks up `data-method="post"` et. al. from links by default when you haven't required capybara/rails [Jonas Nicklas] * `find` now raises an error if more than one element was found. Since `find` is used by most actions, like `click_link` under the surface, this means that all actions need to unambiguous in the future. [Jonas Nicklas] * All methods which find or manipulate fields or buttons now ignore them when they are disabled. [Jonas Nicklas] * Can no longer find elements by id via `find(:foo)`, use `find("#foo")` or `find_by_id("foo")` instead. [Jonas Nicklas] * `Element#text` on RackTest now only returns visible text and normalizes (strips) whitespace, as with Selenium [Mark Dodwell, Jo Liss] * `has_content?` now checks the text value returned by `Element#text`, as opposed to querying the DOM. Which means it does not match hidden text. [Ryan Montgomery, Mark Dodwell, Jo Liss] * #394: `#body` now returns the unmodified source (like `#source`), not the current state of the DOM (like `#html`), by popular request [Jonas Nicklas] * `Node#all` no longer returns an array, but rather an enumerable `Capybara::Result` [Jonas Nicklas] * The arguments to `select` and `unselect` needs to be the exact text of an option in a select box, substrings are no longer allowed [Jonas Nicklas] * The `options` option to `has_select?` must match the exact set of options. Use `with_options` for the old behaviour. [Gonzalo Rodriguez] * The `selected` option to `has_select?` must match all selected options for multiple selects. [Gonzalo Rodriguez] * Various internals for running driver specs, this should only affect driver authors [Jonas Nicklas] * Rename `Driver#body` to `Driver#html` (relevant only for driver authors) [Jo Liss] ### Removed * No longer possible to specify `failure_message` for custom selectors. [Jonas Nicklas] * #589: `Capybara.server_boot_timeout` has been removed in favor of a higher (60-second) hard-coded timeout [Jo Liss] * `Capybara.prefer_visible_elements` has been removed, as it is no longer needed with the changed find semantics [Jonas Nicklas] * `Node#wait_until` and `Session#wait_until` have been removed. See `Node#synchronize` for an alternative [Jonas Nicklas] * `Capybara.timeout` has been removed [Jonas Nicklas] * The `:resynchronize` option has been removed from the Selenium driver [Jonas Nicklas] * The `rows` option to `has_table?` has been removed without replacement. [Jonas Nicklas] ### Added * Much improved error message [Jonas Nicklas] * Errors from inside the session for apps running in a server are raised when session is reset [James Tucker, Jonas Nicklas] * A ton of new selectors built in out of the box, like `field`, `link`, `button`, etc... [Adam McCrea, Jonas Nicklas] * `has_text?` has been added as an alias for `has_content?` [Jonas Nicklas] * Add `Capybara.server_host` option (default: 127.0.0.1) [David Balatero] * Add `:type` option for `page.has_field?` [Gonzalo Rodríguez] * Custom matchers can now be specified in CSS in addition to XPath [Jonas Nicklas] * `Node#synchronize` method to rerun a block of code if certain errors are raised [Jonas Nicklas] * `Capybara.always_include_port` config option always includes the server port in URLs when using `visit`. Facilitates testing different domain names`. [Douwe Maan] * Redirect limit for RackTest driver is configurable [Josh Lane] * Server port can be manually specified during initialization of server. [Jonas Nicklas, John Wilger] * `has_content?` and `has_text?` can be given a regular expression [Vasiliy Ermolovich] * Multiple files can be uploaded with `attach_file` [Jarl Friis] ### Fixed * Nodes found via `all` are no longer reloaded. This fixes weird quirks where nodes would seemingly randomly replace themselves with other nodes [Jonas Nicklas] * Session is only reset if it has been modified, dramatically improves performance if only part of the test suite runs Capybara. [Jonas Nicklas] * Test suite now passes on Ruby 1.8 [Jo Liss] * #565: `require 'capybara/dsl'` is no longer necessary [Jo Liss] * `Rack::Test` now respects ports when changing hosts [Jo Liss] * #603: `Rack::Test` now preserves the original referer URL when following a redirect [Rob van Dijk] * Rack::Test now does not send a referer when calling `visit` multiple times [Jo Liss] * Exceptions during server boot now propagate to main thread [James Tucker] * RSpec integration now cleans up before the test instead of after [Darwin] * If `respect_data_method` is true, the data-method attribute can be capitalized [Marco Antonio] * Rack app boot timing out raises an error as opposed to just logging to STDOUT [Adrian Irving-Beer] * `#source` returns an empty string instead of nil if no pages have been visited [Jonas Nicklas] * Ignore first leading newline in textareas in RackTest [Vitalii Khustochka] * `within_frame` returns the value of the given block [Alistair Hutchison] * Running `Node.set` on text fields will not trigger more than one change event [Andrew Kasper] * Throw an error when an option is given to a finder method, like `all` or `has_selector?` which Capybara doesn't understand [Jonas Nicklas] * Two references to the node now register as equal when comparing them with `==` [Jonas Nicklas] * `has_text` (`has_content`) now accepts non-string arguments, like numbers. [Jo Liss] * `has_text` and `text` now correctly normalize Unicode whitespace, such as ` `. [Jo Liss] * RackTest allows protocol relative URLs [Jonas Nicklas] * Arguments are cast to string where necessary, so that e.g. `click_link(:foo)` works as expected. [Jonas Nicklas] * `:count => 0` now works as expected [Jarl Friis] * Fixed race conditions on negative assertions when removing nodes [Jonas Nicklas] # Version 1.1.4 Release date: 2012-11-28 ### Fixed * Fix more race conditions on negative assertions. [Jonas Nicklas] # Version 1.1.3 Release date: 2012-10-30 ### Fixed: * RackTest driver ignores leading newline in textareas, this is consistent with the spec and how browsers behave. [Vitalii Khustochka] * Nodes found via `all` and `first` are never reloaded. This fixes issues where a node would sometimes magically turn into a completely different node. [Jonas Nicklas] * Fix race conditions on negative assertions. This fixes issues where removing an element and asserting on its non existence could cause StaleElementReferenceError and similar to be thrown. [Jonas Nicklas] * Options are no longer lost when reloading elements. This fixes issues where reloading an element would cause a non-matching element to be found, because options to `find` were ignored. [Jonas Nicklas] # Version 1.1.2 Release date: 2011-11-15 ### Fixed * #541: Make attach_file work with selenium-webdriver >=2.12 [Jonas Nicklas] # Version 1.1.0 Release date: 2011-09-02 ### Fixed * Sensible inspect for Capybara::Session [Jo Liss] * Fix headers and host on redirect [Matt Colyer, Jonas Nicklas, Kim Burgestrand] * using_driver now restores the old driver instead of reverting to the default [Carol Nichols] * Errors when following links relative to the root path under rack-test [Jonas Nicklas, Kim Burgestrand] * Make sure exit codes are propagated properly [Edgar Beigarts] ### Changed * resynchronization is off by default under Selenium ### Added * Elements are automatically reloaded (including parents) during wait [Jonas Nicklas] * Rescue driver specific element errors, such as the dreaded ObsoleteElementError and retry [Jonas Nicklas] * Raise an error if something has frozen time [Jonas Nicklas] * Allow within to take a node instead of a selector [Peter Williams] * Using wait_time_time to change wait time for a block of code [Jonas Nicklas, Kim Burgestrand] * Option for rack-test driver to disable data-method hack [Jonas Nicklas, Kim Burgestrand] # Version 1.0.1 Release date: 2011-08-12 ### Fixed * Dependend on selenium-webdriver ~>2.0 and fix deprecations [Thomas Walpole, Jo Liss] * Depend on Launch 2.0 [Jeremy Hinegardner] * Rack-Test ignores fill in on fields with maxlength="" # Version 1.0.0 Release date: 2011-06-14 ### Added * Added DSL for acceptance tests, inspired by Luismi Cavallé's Steak [Luismi Cavalle and Jonas Nicklas] * Selenium driver automatically waits for AJAX requests to finish [mgiambalvo, Nicklas Ramhöj and Jonas Nicklas] * Support for switching between multiple named sessions [Tristan Dunn] * failure_message can be specified for Selectors [Jonas Nicklas] * RSpec matchers [David Chelimsky and Jonas Nicklas] * Added save_page to save tempfile without opening in browser [Jeff Kreeftmeijer] * Cucumber now switches automatically to a registered driver if the tag matches the name [Jonas Nicklas] * Added Session#text [Jonas Nicklas and Scott Cytacki] * Added Session#html as an alias for Session#body [Jo Liss] * Added Session#current_host method [Jonas Nicklas] * Buttons can now be clicked by title [Javier Martin] * :headers option for RackTest driver to set custom HTTP headers [Jonas Nicklas] ### Removed * Culerity and Celerity drivers have been removed and split into separate gems [Gabriel Sobrinho] ### Deprecated * `include Capybara` has been deprecated in favour of `include Capybara::DSL` [Jonas Nicklas] ### Changed * Rack test driver class has been renamed from Capybara::Driver::RackTest to Capybara::RackTest::Driver [Jonas Nicklas] * Selenium driver class has been renamed from Capybara::Driver::Selenium to Capybara::Selenium::Driver [Jonas Nicklas] * Capybara now prefers visible elements over hidden elements, disable by setting Capybara.prefer_visible_elements = false [Jonas Nicklas and Nicklas Ramhöj] * For RSpec, :type => :request is now supported (and preferred over :acceptance) [Jo Liss] * Selenium driver tried to wait for AJAX requests to finish before proceeding [Jonas Nicklas and Nicklas Ramhöj] * Session no longer uses method missing, uses explicit delegates instead [Jonas Nicklas] ### Fixed * The Rack::Test driver now respects maxlength on text fields [Guilherme Carvalho] * Allow for more than one save_and_open_page call per second [Jo Liss] * Automatically convert options to :count, :minimum, :maximum, etc. to integers [Keith Marcum] * Rack::Test driver honours maxlength on input fields [Guilherme Carvalho] * Rack::Test now works as expected with domains and subdomains [Jonas Nicklas] * Session is reset more thoroughly between tests. [Jonas Nicklas] * Raise error when uploading non-existant file [Jonas Nicklas] * Rack reponse body should respond to #each [Piotr Sarnacki] * Deprecation warnings with selenium webdriver 0.2.0 [Aaron Gibraltar] * Selenium Chrome no longer YELLS tagname [Carl Jackson & David W. Frank] * Capybara no longer strips encoding before sending to Rack [Jonas Nicklas] * Improve handling of relative URLs [John Barton] * Readd and fix build_rack_mock_session [Jonas Nicklas, Jon Leighton] # Version 0.4.1 Release date: 2011-01-21 ### Added * New click_on alias for click_link_or_button, shorter yet unambiguous. [Jonas Nicklas] * Finders now accept :visible => false which will find all elements regardless of Capybara.ignore_hidden_elements [Jonas Nicklas] * Configure how the server is started via Capybara.server { |app, port| ... }. [John Firebough] * Added :between, :maximum and :minimum options to has_selector and friends [James B. Byrne] * New Capybara.string util function which allows matchers on arbitrary strings, mostly for helper and view specs [David Chelimsky and Jonas Nicklas] * Server boot timeout is now configurable, via Capybara.server_boot_timeout [Adam Cigánek] * Built in support for RSpec [Jonas Nicklas] * Capybara.using_driver to switch to a different driver temporarily [Jeff Kreeftmeijer] * Added Session#first which is somewhat speedier than Session#all, use it internally for speed boost [John Firebaugh] ### Changed * Session#within now accepts the same arguments as other finders, like Session#all and Session#find [Jonas Nicklas] ### Removed * All deprecations from 0.4.0 have been removed. [Jonas Nicklas] ### Fixed * Don't mangle URLs in save_and_open_page when using self-closing tags [Adam Spiers] * Catch correct error when server boot times out [Jonas Nicklas] * Celerity driver now properly passes through options, making it configurable [Jonas Nicklas] * Better implementation of attributes in C[ue]lerity, should fix issues with attributes with strange names [Jonas Nicklas] * Session#find no longer swallows errors [Jonas Nicklas] * Fix problems with multiple file inputs [Philip Arndt] * Submit multipart forms as multipart under rack-test even if they contain no files [Ryan Kinderman] * Matchers like has_select? and has_checked_field? now work with dynamically changed values [John Firebaugh] * Preserve order of rack params [Joel Chippindale] * RackTest#reset! is more thorough [Joel Chippindale] # Version 0.4.0 Release date: 2010-10-22 ### Changed * The Selector API was changed slightly, use Capybara.add_selector, see README ### Fixed * Celerity driver is registered properly * has_selector? and has_no_selector? added to DSL * Multiple selects return correct values under C[cu]lerity * Naked query strings are handled correctly by rack-test # Version 0.4.0.rc Release date: 2010-10-12 ### Changed * within and find/locate now follow the XPath spec in that //foo finds all nodes in the document, instead of only for the context node. See this post for details: http://groups.google.com/group/ruby-capybara/browse_thread/thread/b129067979df21b3 * within now executes within the first found instance of the selector, not in all of them * find now waits for AJAX requests and raises an exception when the element is not found (same as locate used to do) * The default selector is now CSS, not XPath ### Deprecated * Session#click has been renamed click_link_or_button and the old click has been deprecated * Node#node has been renamed native * Node#locate is deprecated in favor of Node#find, which now behaves identically * Session#drag is deprecated, please use Node#drag_to(other_node) instead ### Added * Pretty much everything is properly documented now * It's now possible to call all session methods on nodes, like `find('#foo').fill_in(...)` * Custom selectors can be added with Capybara::Selector.add * The :id selector is added by default, use it lile `find(:id, 'foo')` or `find(:foo)` * Added Node#has_selector? so any kind of selector can be queried. * Added Capybara.configure for less wordy configuration * Added within_window to switch between different windows (currently Selenium only) * Capybara.server_port to provide a fixed port if wanted (defaults to automatic selection) ### Fixed * CSS selectors with multiple selectors, such as "h1, h2" now work correctly * Port is automatically assigned instead of guessing * Strip encodings in rack-test, no more warnings! * RackTest no longer submits disabled fields * Servers no longer output annoying debug information when started * TCP port selection is left to Ruby to decide, no more port guessing * Select boxes now return option value instead of text if present * The default has been changed from localhost to 127.0.0.1, should fix some obscure selenium bugs * RackTest now supports complex field names, such as foo[bar][][baz] # Version 0.3.9 Release date: 2010-07-03 ### Added * status_code which returns the HTTP status code of the last response (no Selenium!) * Capybara.save_and_open_page to store tempfiles * RackTest and Culerity drivers now clean up after themselves properly ### Fixed * When no rack app is set and the app is called, a more descriptive error is raised * select now works with optgroups * Don't submit image buttons unless they were clicked under rack-test * Support custom field types under Selenium * Support input fields without a type, treat them as though they were text fields * Redirect now throws an error after 5 redirects, as per RFC * Selenium now properly raises an error when Node#trigger is called * Node#value now returns the correct value for textareas under rack-test # Version 0.3.8 Release date: 2010-05-12 ### Added * Within_frame method to execute a block of code within a particular iframe (Selenium only!) ### Fixed * Single quotes are properly escaped with `select` under rack-test and Selenium. * The :text option for searches now escapes regexp special characters when a string is given. * Selenium now correctly checks already checked checkboxes (same with uncheck) * Timing issue which caused Selenium to hang under certain circumstances. * Selenium now resolves attributes even if they are given as a Symbol # Version 0.3.7 Release date: 2010-04-09 This is a drop in compatible maintainance release. It's mostly important for driver authors. ### Added * RackTest scans for data-method which rails3 uses to change the request method ### Fixed * Don't hang when starting server on Windoze ### Changed * The driver and session specs are now located inside lib! Driver authors can simply require them. # Version 0.3.6 Release date: 2010-03-22 This is a maintainance release with minor bug fixes, should be drop in compatible. ### Added * It's now possible to load in external drivers ### Fixed * has_content? ignores whitespace * Trigger events when choosing radios and checking checkboxes under Selenium * Make Capybara.app totally optional when running without server * Changed fallback host so it matches the one set up by Rails' integration tests # Version 0.3.5 Release date: 2010-02-26 This is a mostly backwards compatible release, it does break the API in some minor places, which should hopefully not affect too many users, please read the release notes carefully! ### Breaking * Relative searching in a node (e.g. find('//p').all('//a')) will now follow XPath standard this means that if you want to find descendant nodes only, you'll need to prefix a dot! * `visit` now accepts fully qualified URLs for drivers that support it. * Capybara will always try to run a rack server, unless you set Capybara.run_sever = false ### Changed * thin is preferred over mongrel and webrick, since it is Ruby 1.9 compatible * click_button and click will find , clicking them does nothing in RackTest ### Added * Much improved error messages in a multitude of places * More semantic page querying with has_link?, has_button?, etc... * Option to ignore hidden elements when querying and interacting with the page * Support for multiple selects ### Fixed * find_by_id is no longer broken * clicking links where the image's alt attribute contains the text is now possible * within_fieldset and within_table work when the default selector is CSS * boolean attributes work the same across drivers (return true/false)