diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-11-19 14:36:16 +0300 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-11-19 14:36:37 +0300 |
commit | 4c37cf684d75297a88db2dd1c286a68fd8aec701 (patch) | |
tree | f909d8c01477d2fa23b3a291cfaa6c0963b5e788 /qa/qa/runtime/browser.rb | |
parent | 6e1df95ed3a552e4c4dc61150dc2825508d888ec (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.rb | 83 |
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 |