[MediaWiki-commits] [Gerrit] Support all SauceLabs provided browsers - change (mediawiki/selenium)

2015-12-11 Thread jenkins-bot (Code Review)
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)

2015-12-10 Thread Dduvall (Code Review)
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|