All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Capybara/SpecificFindersRuboCop rule removed fromconfig/rubocop.yml— the gem has no Capybara dependency
- DSL wait helpers:
wait_for,wait_for_text,wait_for_current_path, andwait_for_flash - Action helpers with built-in waiting:
click_button_and_wait_for_text,click_link_and_wait_for_text,click_button_and_wait_for_path,click_link_and_wait_for_path,click_button_and_wait_for_flash,click_link_and_wait_for_flash - Configurable flash selectors via
E2E.config.flash_selectors
- Minitest integration now includes auto-waiting assertions:
assert_text,refute_text,assert_selector,refute_selector,assert_current_path,refute_current_path E2E::Minitest::TestCasenow automatically quits the browser session after the test suite finishes
- RuboCop configuration now correctly disables
Capybara/SpecificFinderscop for E2E tests, preventing false positive suggestions to usefind_by_id(which is not supported by this gem)
have_no_content/have_no_textmatchers with auto-waiting supporthave_no_current_pathmatcher with auto-waiting support
have_current_path(and its negation) no longer crashes on invalid URIs (e.g.,data:URLs)
- Auto-waiting matchers:
have_text,have_content, andhave_current_pathnow automatically retry until the expected condition is met or the timeout expires, eliminating flaky tests caused by page transitions and async rendering have_current_pathmatcher for asserting the current URL path with auto-waiting (supports exact strings and regexps)E2E.wait_untilhelper method for custom waiting logic in testswait_timeoutconfiguration option (default: 5 seconds) to control how long matchers wait before failingtextmethod on page/session for reading visible text content of the page body
fill_innow matches fields by label, placeholder, id, and name (Capybara-like behavior) instead of only CSS selectors, with fallback to direct CSS selector
Playwright::TargetClosedErroron CI environments without X-server by only enabling debug console in headed modepausenow raises a clear error when called in headless mode instead of failing silently
uninitialized constant RSpec::Matcherserror when loading the gem in environments where RSpec is only partially initialized (e.g., viaBundler.require)- Matchers are now only defined if
RSpec::Matchersis actually present - Matchers are no longer automatically loaded by
require "e2e"; they are now explicitly loaded viarequire "e2e/rspec"
- Custom RSpec matchers:
have_class,have_text/have_content,have_value,have_attribute,be_visible,be_checked,be_disabled/be_enabled - Element API methods:
classes,has_class?,visible?,[],value,checked?,disabled?,enabled? - Improved debugging documentation and fixed
pausehelper
- Browser switching support for Chromium, Firefox, and WebKit via
E2E.config.browser_type E2E.reset_session!for dynamic session managementrails g e2e:installgenerator with test framework detection (RSpec/Minitest) and RuboCop config injectionrails g e2e:testgenerator for scaffolding test files- Minitest support via
E2E::Minitest::TestCase - RuboCop integration with automatic
inherit_geminjection pausehelper for Playwright Inspector
- Initial release of
e2egem, a unified testing framework wrapper around Playwright - Playwright driver implementation using
playwright-ruby-client(IPC/Pipes) - Capybara-like DSL:
visit,click_button,click_link,fill_in,check,uncheck,attach_file,find,all E2E.enable_shared_connection!for fast transactional tests in Rails- Rack application booting via
E2E.config.app - Basic RSpec integration (
type: :e2e)