[MediaWiki-commits] [Gerrit] Support all SauceLabs provided browsers - change (mediawiki/selenium)
jenkins-bot has submitted this change and it was merged. Change subject: Support all SauceLabs provided browsers .. Support all SauceLabs provided browsers Refactored base browser factory to allow for instantiation of any browser supported by the underlying implementation, Watir and SauceLabs. Added additional support for configuring the iPhone/Android device name and orientation. Bug: T114362 Change-Id: I5e80b80a4bf65f738cac90a2216ae92256e28128 --- A features/saucelabs_browsers.feature M features/step_definitions/saucelabs_steps.rb M lib/mediawiki_selenium/browser_factory.rb M lib/mediawiki_selenium/browser_factory/base.rb M lib/mediawiki_selenium/remote_browser_factory.rb M spec/browser_factory/base_spec.rb A spec/browser_factory_spec.rb M spec/remote_browser_factory_spec.rb 8 files changed, 87 insertions(+), 5 deletions(-) Approvals: Zfilipin: Looks good to me, approved jenkins-bot: Verified diff --git a/features/saucelabs_browsers.feature b/features/saucelabs_browsers.feature new file mode 100644 index 000..90edacf --- /dev/null +++ b/features/saucelabs_browsers.feature @@ -0,0 +1,21 @@ +Feature: Support for entire suite of browsers provided by SauceLabs + Background: +Given I have configured my environment from `ENV` + And I have set "SAUCE_ONDEMAND_USERNAME" in my shell + And I have set "SAUCE_ONDEMAND_ACCESS_KEY" in my shell + + Scenario Outline: All SauceLabs browsers are supported +Given I have configured my environment to use on +When I start interacting with the browser +Then the browser is open + + Examples: +| browser | platform | +| firefox | linux | +| firefox | windows| +| chrome| linux | +| chrome| windows| +| internet_explorer | windows| +| safari| os x 10.11 | +| android | linux | +| iphone| os x 10.11 | diff --git a/features/step_definitions/saucelabs_steps.rb b/features/step_definitions/saucelabs_steps.rb index 89900a1..d8814ea 100644 --- a/features/step_definitions/saucelabs_steps.rb +++ b/features/step_definitions/saucelabs_steps.rb @@ -1,5 +1,10 @@ require 'net/https' +Given(/^I have configured my environment to use (.*?) on (.*?)$/) do |browser, platform| + @configs = [ENV, { browser: browser, platform: platform, browser_timeout: 120 }] + @env = MediawikiSelenium::Environment.new(*@configs) +end + Then(/^the SauceLabs job should be marked as failed$/) do job_id = @env.browser.driver.session_id diff --git a/lib/mediawiki_selenium/browser_factory.rb b/lib/mediawiki_selenium/browser_factory.rb index 143c40f..1b98a78 100644 --- a/lib/mediawiki_selenium/browser_factory.rb +++ b/lib/mediawiki_selenium/browser_factory.rb @@ -5,7 +5,9 @@ autoload :Chrome, 'mediawiki_selenium/browser_factory/chrome' autoload :Phantomjs, 'mediawiki_selenium/browser_factory/phantomjs' -# Resolves and instantiates a new factory for the given browser name. +# Resolves and instantiates a new factory for the given browser name. If a +# specific implementation is not defined for the given browser, a `Base` +# factory will be returned. # # @example Create a new firefox factory # factory = BrowserFactory.new(:firefox) @@ -17,7 +19,14 @@ # @return [BrowserFactory::Base] # def self.new(browser_name) - factory_class = const_get(browser_name.to_s.split('_').map(&:capitalize).join('')) + factory_class_name = browser_name.to_s.split('_').map(&:capitalize).join('') + + if const_defined?(factory_class_name) +factory_class = const_get(factory_class_name) + else +factory_class = Base + end + factory_class.new(browser_name) end end diff --git a/lib/mediawiki_selenium/browser_factory/base.rb b/lib/mediawiki_selenium/browser_factory/base.rb index 70a6815..372b339 100644 --- a/lib/mediawiki_selenium/browser_factory/base.rb +++ b/lib/mediawiki_selenium/browser_factory/base.rb @@ -227,7 +227,7 @@ end def new_browser(options) -Watir::Browser.new(options[:desired_capabilities].browser_name, options) +Watir::Browser.new(browser_name, options) end end end diff --git a/lib/mediawiki_selenium/remote_browser_factory.rb b/lib/mediawiki_selenium/remote_browser_factory.rb index 341d0ed..66f27f4 100644 --- a/lib/mediawiki_selenium/remote_browser_factory.rb +++ b/lib/mediawiki_selenium/remote_browser_factory.rb @@ -9,6 +9,8 @@ # - sauce_ondemand_access_key # - platform # - version + # - device_name + # - device_orientation # module RemoteBrowserFactory REQUIRED_CONFIG = [:sauce_ondemand_username, :sauce_ondemand_access_key] @@ -37,6 +39,14 @@ base.configure(:version) do |version, options| options[:desired_capabilities].version = version end +
[MediaWiki-commits] [Gerrit] Support all SauceLabs provided browsers - change (mediawiki/selenium)
Dduvall has uploaded a new change for review. https://gerrit.wikimedia.org/r/258394 Change subject: Support all SauceLabs provided browsers .. Support all SauceLabs provided browsers Refactored base browser factory to allow for instantiation of any browser supported by the underlying implementation, Watir and SauceLabs. Added additional support for configuring the iPhone/Android device name and orientation. Bug: T114362 Change-Id: I5e80b80a4bf65f738cac90a2216ae92256e28128 --- A features/saucelabs_browsers.feature M features/step_definitions/saucelabs_steps.rb M lib/mediawiki_selenium/browser_factory.rb M lib/mediawiki_selenium/browser_factory/base.rb M lib/mediawiki_selenium/remote_browser_factory.rb M spec/browser_factory/base_spec.rb A spec/browser_factory_spec.rb M spec/remote_browser_factory_spec.rb 8 files changed, 87 insertions(+), 5 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/selenium refs/changes/94/258394/1 diff --git a/features/saucelabs_browsers.feature b/features/saucelabs_browsers.feature new file mode 100644 index 000..90edacf --- /dev/null +++ b/features/saucelabs_browsers.feature @@ -0,0 +1,21 @@ +Feature: Support for entire suite of browsers provided by SauceLabs + Background: +Given I have configured my environment from `ENV` + And I have set "SAUCE_ONDEMAND_USERNAME" in my shell + And I have set "SAUCE_ONDEMAND_ACCESS_KEY" in my shell + + Scenario Outline: All SauceLabs browsers are supported +Given I have configured my environment to use on +When I start interacting with the browser +Then the browser is open + + Examples: +| browser | platform | +| firefox | linux | +| firefox | windows| +| chrome| linux | +| chrome| windows| +| internet_explorer | windows| +| safari| os x 10.11 | +| android | linux | +| iphone| os x 10.11 | diff --git a/features/step_definitions/saucelabs_steps.rb b/features/step_definitions/saucelabs_steps.rb index 89900a1..d8814ea 100644 --- a/features/step_definitions/saucelabs_steps.rb +++ b/features/step_definitions/saucelabs_steps.rb @@ -1,5 +1,10 @@ require 'net/https' +Given(/^I have configured my environment to use (.*?) on (.*?)$/) do |browser, platform| + @configs = [ENV, { browser: browser, platform: platform, browser_timeout: 120 }] + @env = MediawikiSelenium::Environment.new(*@configs) +end + Then(/^the SauceLabs job should be marked as failed$/) do job_id = @env.browser.driver.session_id diff --git a/lib/mediawiki_selenium/browser_factory.rb b/lib/mediawiki_selenium/browser_factory.rb index 143c40f..1b98a78 100644 --- a/lib/mediawiki_selenium/browser_factory.rb +++ b/lib/mediawiki_selenium/browser_factory.rb @@ -5,7 +5,9 @@ autoload :Chrome, 'mediawiki_selenium/browser_factory/chrome' autoload :Phantomjs, 'mediawiki_selenium/browser_factory/phantomjs' -# Resolves and instantiates a new factory for the given browser name. +# Resolves and instantiates a new factory for the given browser name. If a +# specific implementation is not defined for the given browser, a `Base` +# factory will be returned. # # @example Create a new firefox factory # factory = BrowserFactory.new(:firefox) @@ -17,7 +19,14 @@ # @return [BrowserFactory::Base] # def self.new(browser_name) - factory_class = const_get(browser_name.to_s.split('_').map(&:capitalize).join('')) + factory_class_name = browser_name.to_s.split('_').map(&:capitalize).join('') + + if const_defined?(factory_class_name) +factory_class = const_get(factory_class_name) + else +factory_class = Base + end + factory_class.new(browser_name) end end diff --git a/lib/mediawiki_selenium/browser_factory/base.rb b/lib/mediawiki_selenium/browser_factory/base.rb index 70a6815..372b339 100644 --- a/lib/mediawiki_selenium/browser_factory/base.rb +++ b/lib/mediawiki_selenium/browser_factory/base.rb @@ -227,7 +227,7 @@ end def new_browser(options) -Watir::Browser.new(options[:desired_capabilities].browser_name, options) +Watir::Browser.new(browser_name, options) end end end diff --git a/lib/mediawiki_selenium/remote_browser_factory.rb b/lib/mediawiki_selenium/remote_browser_factory.rb index 341d0ed..66f27f4 100644 --- a/lib/mediawiki_selenium/remote_browser_factory.rb +++ b/lib/mediawiki_selenium/remote_browser_factory.rb @@ -9,6 +9,8 @@ # - sauce_ondemand_access_key # - platform # - version + # - device_name + # - device_orientation # module RemoteBrowserFactory REQUIRED_CONFIG = [:sauce_ondemand_username, :sauce_ondemand_access_key] @@ -37,6 +39,14 @@ base.configure(:version) do |version, options|