lib/howitzer/web/capybara_methods_proxy.rb in howitzer-2.0.1 vs lib/howitzer/web/capybara_methods_proxy.rb in howitzer-2.0.2
- old
+ new
@@ -1,13 +1,38 @@
require 'capybara'
+# Remove this monkey patch after fixing the bugs in selenium-webdriver / capybara
+#:nocov:
+class Capybara::Selenium::Driver # rubocop:disable Style/ClassAndModuleChildren
+ #
+ # https://github.com/teamcapybara/capybara/issues/1845
+ def title
+ return browser.title unless within_frame?
+ find_xpath('/html/head/title').map { |n| n[:text] }.first.to_s
+ end
+
+ # Known issue, works differently for phantomjs and real browsers
+ # https://github.com/seleniumhq/selenium/issues/1727
+ def current_url
+ return browser.current_url unless within_frame?
+ execute_script('return document.location.href')
+ end
+
+ private
+
+ def within_frame?
+ !(@frame_handles.empty? || @frame_handles[browser.window_handle].empty?)
+ end
+end
+#:nocov:
+
module Howitzer
module Web
# This module proxies required original capybara methods to recipient
module CapybaraMethodsProxy
PROXIED_CAPYBARA_METHODS = Capybara::Session::SESSION_METHODS + #:nodoc:
Capybara::Session::MODAL_METHODS +
- [:driver, :text]
+ %i(driver text)
# Capybara form dsl methods are not compatible with page object pattern and Howitzer gem.
# Instead of including Capybara::DSL module, we proxy most interesting Capybara methods and
# prevent using extra methods which can potentially broke main principles and framework concept
PROXIED_CAPYBARA_METHODS.each do |method|