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 0000000..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 <browser> on <platform> + 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 + + base.configure(:device_name) do |device_name, options| + options[:desired_capabilities]['deviceName'] = device_name + end + + base.configure(:device_orientation) do |device_orientation, options| + options[:desired_capabilities]['deviceOrientation'] = device_orientation + end end end diff --git a/spec/browser_factory/base_spec.rb b/spec/browser_factory/base_spec.rb index 18d4308..04038bc 100644 --- a/spec/browser_factory/base_spec.rb +++ b/spec/browser_factory/base_spec.rb @@ -97,8 +97,6 @@ before do expect(Selenium::WebDriver::Remote::Capabilities).to receive(browser_name). at_least(:once).and_return(capabilities) - expect(capabilities).to receive(:browser_name). - at_least(:once).and_return(browser_name) end it 'creates a new Watir::Browser' do diff --git a/spec/browser_factory_spec.rb b/spec/browser_factory_spec.rb new file mode 100644 index 0000000..dad88b1 --- /dev/null +++ b/spec/browser_factory_spec.rb @@ -0,0 +1,21 @@ +require 'spec_helper' + +module MediawikiSelenium + describe BrowserFactory do + describe '.new' do + context 'given a browser that has a specific implementation' do + subject { BrowserFactory.new(:firefox) } + + it 'instantiates the concrete factory class' do + expect(subject).to be_a(BrowserFactory::Firefox) + end + end + + context 'given a browser that has no specific implementation' do + subject { BrowserFactory.new(:lynx) } + + it { is_expected.to be_a(BrowserFactory::Base) } + end + end + end +end diff --git a/spec/remote_browser_factory_spec.rb b/spec/remote_browser_factory_spec.rb index 4db3fc8..eeb0292 100644 --- a/spec/remote_browser_factory_spec.rb +++ b/spec/remote_browser_factory_spec.rb @@ -47,6 +47,24 @@ subject end end + + context 'given a device name' do + let(:config) { { device_name: 'tabliphone' } } + + it 'configures the deviceName' do + expect(capabilities).to receive(:[]=).with('deviceName', 'tabliphone') + subject + end + end + + context 'given a device orientation' do + let(:config) { { device_orientation: 'portrait' } } + + it 'configures the deviceOrientation' do + expect(capabilities).to receive(:[]=).with('deviceOrientation', 'portrait') + subject + end + end end describe '#teardown' do -- To view, visit https://gerrit.wikimedia.org/r/258394 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I5e80b80a4bf65f738cac90a2216ae92256e28128 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/selenium Gerrit-Branch: master Gerrit-Owner: Dduvall <dduv...@wikimedia.org> Gerrit-Reviewer: Hashar <has...@free.fr> Gerrit-Reviewer: Zfilipin <zfili...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits