Skip to content

Commit dd3e2bb

Browse files
committed
WIP
1 parent 66a446e commit dd3e2bb

File tree

4 files changed

+56
-96
lines changed

4 files changed

+56
-96
lines changed

spec/rails_helper.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@
4949
# Using errors_ok as there is a timing issue causing crashes without this setting
5050
# https://github.com/teampoltergeist/poltergeist/issues/830
5151

52-
default_driver = :selenium_chrome
52+
default_driver = :selenium_chrome_headless
5353

5454
supported_drivers = %i[ poltergeist poltergeist_errors_ok
5555
poltergeist_no_animations webkit
56-
selenium_chrome selenium_firefox selenium]
56+
selenium_chrome selenium_chrome_headless selenium_firefox selenium]
5757
driver = ENV["DRIVER"].try(:to_sym) || default_driver
5858
Capybara.default_driver = driver
5959

@@ -95,7 +95,7 @@
9595
js_driver.render(path, full: true)
9696
end
9797

98-
when :selenium_chrome
98+
when :selenium_chrome, :selenium_chrome_headless
9999
DriverRegistration.register_selenium_chrome
100100
when :selenium_firefox, :selenium
101101
DriverRegistration.register_selenium_firefox
@@ -185,7 +185,7 @@ def js_errors_driver
185185
end
186186

187187
def js_selenium_driver
188-
driver = Capybara.javascript_driver == :selenium_firefox ? :selenium_firefox : :selenium_chrome
188+
driver = Capybara.javascript_driver == :selenium_firefox ? :selenium_firefox : :selenium_chrome_headless
189189
if driver == :selenium_firefox
190190
DriverRegistration.register_selenium_firefox
191191
else

spec/support/driver_registration.rb

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ module DriverRegistration
22
def self.register_selenium_chrome
33
return if @selenium_chrome_registered
44
Capybara.register_driver :selenium_chrome do |app|
5+
Capybara::Selenium::Driver.new(app,
6+
browser: :chrome)
7+
end
8+
Capybara.register_driver :selenium_chrome_headless do |app|
59
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
610
chromeOptions: { args: %w[headless disable-gpu] }
711
)

spec/support/poltergeist.rb

-92
This file was deleted.

spec/support/selenium_logger.rb

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
RSpec.configure do |config|
2+
config.after(:each, :js) do
3+
next unless [:selenium_chrome, :selenium_chrome_headless].include?(Capybara.current_driver)
4+
5+
errors = []
6+
7+
page.driver.browser.manage.logs.get(:browser).each do |entry|
8+
next if entry.message =~ /Download the React DevTools for a better development experience/
9+
10+
# Chrome doesn't allow suppressing log entries for network responses with statuses >= 400 (even if this is valid
11+
# api behaviour) and always show them in log as SEVERE errors prior to any js error resolving. Some info here:
12+
# https://bugs.chromium.org/p/chromium/issues/detail?id=677599
13+
# https://bugs.chromium.org/p/chromium/issues/detail?id=124534
14+
# https://bugs.chromium.org/p/chromium/issues/detail?id=96212
15+
# This doesn't skips unhandled js errors which should be properly catched
16+
next if @skipped_chrome_network_errors&.any? do |e|
17+
entry.message.include? \
18+
"#{e[:path]} - Failed to load resource: the server responded with a status of #{e[:status]}"
19+
end
20+
21+
# needs external mock server for selenium
22+
if entry.message =~ /res.cloudinary.com/
23+
puts entry.message
24+
next
25+
end
26+
27+
# several places SLV
28+
if entry.message =~ /"Warning: Text content did not match. Server: \\"1000\\" Client: \\"1,000\\""/
29+
puts entry.message
30+
next
31+
end
32+
33+
pretty_message = if entry.message =~ %r{http://(127.0.0.1|app.lvh.me)[^ ]+ [\d:]+ }
34+
entry.message[/[^ ]+ [^ ]+ (.*)$/, 1]&.gsub(/\A"|"\Z/, "")&.gsub(/\\n/, "\n")
35+
else
36+
entry.message
37+
end
38+
39+
%w[DEBUG INFO WARNING].include?(entry.level) ? puts(pretty_message) : errors << pretty_message
40+
end
41+
42+
page.driver.browser.manage.logs.get(:driver).each do |entry|
43+
%w[DEBUG INFO WARNING].include?(entry.level) ? puts(entry.message) : errors << entry.message
44+
end
45+
46+
raise("Java Script Error(s) on the page:\n\n" + errors.join("\n")) if errors.present?
47+
end
48+
end

0 commit comments

Comments
 (0)