From 2568e405e0923b6b5b87c210321aead057f27cf1 Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Sun, 16 Sep 2018 11:50:56 -0700 Subject: [PATCH] Work around geckodriver 0.22/selenium-webdriver issue with pause durations --- lib/capybara.rb | 1 - lib/capybara/selenium/driver.rb | 2 ++ lib/capybara/selenium/patches/pause_duration_fix.rb | 11 +++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 lib/capybara/selenium/patches/pause_duration_fix.rb diff --git a/lib/capybara.rb b/lib/capybara.rb index deafdd1e..770e9d49 100644 --- a/lib/capybara.rb +++ b/lib/capybara.rb @@ -430,7 +430,6 @@ module Capybara require 'capybara/rack_test/css_handlers.rb' require 'capybara/selenium/node' - require 'capybara/selenium/nodes/marionette_node' require 'capybara/selenium/driver' end diff --git a/lib/capybara/selenium/driver.rb b/lib/capybara/selenium/driver.rb index 0a4587a0..c44621ad 100644 --- a/lib/capybara/selenium/driver.rb +++ b/lib/capybara/selenium/driver.rb @@ -28,6 +28,7 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base setup_exit_handler end end + @browser end def initialize(app, **options) @@ -360,6 +361,7 @@ private when :chrome extend ChromeDriver when :firefox + require 'capybara/selenium/patches/pause_duration_fix' if sel_driver.capabilities['moz:geckodriverVersion']&.start_with?('0.22.') extend MarionetteDriver if sel_driver.capabilities.is_a?(::Selenium::WebDriver::Remote::W3C::Capabilities) end end diff --git a/lib/capybara/selenium/patches/pause_duration_fix.rb b/lib/capybara/selenium/patches/pause_duration_fix.rb new file mode 100644 index 00000000..8d979af4 --- /dev/null +++ b/lib/capybara/selenium/patches/pause_duration_fix.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module PauseDurationFix + def encode + super.tap { |output| output[:duration] ||= 0 } + end +end + +if defined?(::Selenium::WebDriver::Interactions::Pause) + ::Selenium::WebDriver::Interactions::Pause.prepend PauseDurationFix +end