Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-11-19 14:36:16 +0300
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-11-19 14:36:37 +0300
commit4c37cf684d75297a88db2dd1c286a68fd8aec701 (patch)
treef909d8c01477d2fa23b3a291cfaa6c0963b5e788 /qa/qa/runtime/browser.rb
parent6e1df95ed3a552e4c4dc61150dc2825508d888ec (diff)
Make QA runtime browser an actable object
[ci skip]
Diffstat (limited to 'qa/qa/runtime/browser.rb')
-rw-r--r--qa/qa/runtime/browser.rb83
1 files changed, 47 insertions, 36 deletions
diff --git a/qa/qa/runtime/browser.rb b/qa/qa/runtime/browser.rb
index a14a4adce22..2226c56c012 100644
--- a/qa/qa/runtime/browser.rb
+++ b/qa/qa/runtime/browser.rb
@@ -5,49 +5,24 @@ require 'selenium-webdriver'
module QA
module Runtime
- module Browser
- extend self
+ class Browser
+ include Scenario::Actable
- def visit(entry, &block)
- address = entry.is_a?(String) ? entry : entry.address
-
- configure!
- page.visit(address)
-
- if block_given?
- block.call(page)
+ def initialize
+ self.class.configure!
+ end
- page.visit(address)
- reset_domain_session!
- end
- rescue
- # RSpec examples will take care of screenshots on their own
- #
- unless block.binding.receiver.class < RSpec::Core::ExampleGroup
- Capybara::Screenshot.screenshot_and_save_page
+ def visit(page, &block)
+ Browser::Session.new(page).tap do |session|
+ session.perform(&block)
end
-
- raise
end
- ##
- # Current session, when Capybara::DSL is included `page` method is
- # mixed in as well.
- #
- def page
- Capybara.current_session
+ def self.visit(page, &block)
+ new.visit(page, &block)
end
- def reset_domain_session(address)
- ##
- # Selenium allows to reset session cookies for current domain only.
- #
- # See gitlab-org/gitlab-qa#102
- #
- Capybar.reset_session!
- end
-
- def configure!
+ def self.configure!
return if Capybara.drivers.include?(:chrome)
Capybara.register_driver :chrome do |app|
@@ -73,6 +48,42 @@ module QA
config.save_path = 'tmp'
end
end
+
+ class Session
+ include Capybara::DSL
+
+ attr_reader :address
+
+ def initialize(page)
+ @address = page.is_a?(String) ? page : page.address
+ end
+
+ def perform(&block)
+ visit(@address)
+
+ block.call if block_given?
+ rescue
+ # RSpec examples will take care of screenshots on their own
+ #
+ unless block.binding.receiver.class < RSpec::Core::ExampleGroup
+ Capybara::Screenshot.screenshot_and_save_page
+ end
+
+ raise
+ ensure
+ clear! if block_given?
+ end
+
+ ##
+ # Selenium allows to reset session cookies for current domain only.
+ #
+ # See gitlab-org/gitlab-qa#102
+ #
+ def clear!
+ visit(@address)
+ Capybara.reset_session!
+ end
+ end
end
end
end