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
8 changes: 3 additions & 5 deletions .github/workflows/ruby.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,12 @@ jobs:
id: playwright-cache
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-chromium-headless-shell-1.59.0
key: playwright-${{ runner.os }}-chromium-headless-shell-1.59.0-${{ matrix.ci_node_index }}

- name: Install Playwright Chromium Headless Shell (cache miss)
if: steps.playwright-cache.outputs.cache-hit != 'true'
- name: Install Playwright Chromium Headless Shell
run: npx --yes playwright@1.59.0 install chromium-headless-shell

- name: Install Playwright system deps (cache hit)
if: steps.playwright-cache.outputs.cache-hit == 'true'
- name: Install Playwright system dependencies
run: npx --yes playwright@1.59.0 install-deps chromium-headless-shell

- name: Setup test databases
Expand Down
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ GEM
bigdecimal
rexml
crass (1.0.6)
css_parser (1.14.0)
css_parser (1.22.0)
addressable
csv (3.3.5)
database_cleaner (2.1.0)
Expand Down
17 changes: 16 additions & 1 deletion spec/support/capybara.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,25 @@
# See: https://playwright.dev/docs/browsers#chromium-headless-shell

Capybara.register_driver :playwright do |app|
# Use chromium-headless-shell if available (CI), fallback to regular chromium
# Try multiple patterns to find the headless shell executable on different platforms
cache_dir = File.expand_path('~/.cache/ms-playwright')
patterns = [
'chromium_headless_shell-*/**/headless_shell', # Linux
'chromium_headless_shell-*/**/chrome-headless-shell', # Mac
]

headless_shell = patterns.map do |pattern|
Dir.glob(File.join(cache_dir, pattern)).max
end.compact.first

executable_path = headless_shell if headless_shell && File.executable?(headless_shell)

Capybara::Playwright::Driver.new(
app,
headless: ENV.fetch('PLAYWRIGHT_HEADLESS', 'true') !~ /^(false|no|0)$/i,
browser_type: ENV.fetch('PLAYWRIGHT_BROWSER', 'chromium').to_sym
browser_type: ENV.fetch('PLAYWRIGHT_BROWSER', 'chromium').to_sym,
executablePath: executable_path
)
end

Expand Down