Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

### Added
- `Driver#downloads` to wait for downloads and list them, files are saved to `Capybara.save_path` [#181]
- `Driver#console` with the page's `console.*` calls, browser log entries and uncaught exceptions, no more parsing the
`:logger` output to get them [#113]

### Changed

Expand Down
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ source "https://rubygems.org"

gem "byebug", "~> 11.1", platforms: %i[mri windows]
gem "chunky_png", "~> 1.4"
gem "ferrum", github: "rubycdp/ferrum", branch: "main"
gem "ferrum"
gem "image_size", "~> 3.0"
gem "launchy", "~> 2.5"
gem "logger"
Expand Down
2 changes: 1 addition & 1 deletion cuprite.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ Gem::Specification.new do |s|
s.required_ruby_version = ">= 3.2"

s.add_dependency "capybara", "~> 3.0"
s.add_dependency "ferrum", "~> 0.19.1"
s.add_dependency "ferrum", "~> 0.20.0"
end
26 changes: 26 additions & 0 deletions docs/7-javascript.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,32 @@ Pass `js_errors: true` to re-raise JavaScript errors from the page as
Capybara::Cuprite::Driver.new(app, js_errors: true)
```

## Console

`page.driver.console` is Ferrum's [console](/docs/ferrum/javascript#console)
for the current page: `console.*` calls, browser log entries (failed resource
loads, CSP violations, deprecations, ...) and uncaught exceptions. It's
`Enumerable` over the last 1000 messages and is cleared at the end of every
test.

```ruby
visit "/"
page.driver.console.last.text # => "Hello world"
page.driver.console.select(&:error?) # => [#<Ferrum::Console::Message type=:error source=:network ...>]
```

Fail a test on browser errors:

```ruby
after { expect(page.driver.console.select(&:error?)).to be_empty }
```

Print what the page logged:

```ruby
after { page.driver.console.each { |message| warn(message) } }
```

## Preloading scripts

Use the `:extensions` option to load scripts into every page before any other
Expand Down
3 changes: 2 additions & 1 deletion lib/capybara/cuprite/driver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ class Driver < Capybara::Driver::Base

delegate %i[restart quit status_code timeout timeout= current_url title body
window_handles close_window switch_to_window within_window window_handle
back forward refresh wait_for_reload viewport_size device_pixel_ratio downloads] => :browser
back forward refresh wait_for_reload viewport_size device_pixel_ratio downloads
console] => :browser
delegate %i[send_keys] => :active_element
alias html body
alias current_window_handle window_handle
Expand Down
18 changes: 18 additions & 0 deletions spec/features/driver_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -946,6 +946,24 @@ def create_screenshot(file, *args)
end
end

context "console" do
it "collects console messages of the page" do
@session.visit("/cuprite/console_log")

message = @driver.console.last
expect(message.text).to eq("Hello world")
expect(message.type).to eq(:log)
expect(message.source).to eq(:console_api)
end

it "forgets messages after reset" do
@session.visit("/cuprite/console_log")
@driver.reset!

expect(@driver.console).to be_empty
end
end

context "cookies support" do
it "returns set cookies" do
@session.visit("/set_cookie")
Expand Down
Loading