Moved ULS tests from browsertests repository
Change-Id: I4f4a4c5530ad7e5dff70171b59a589dc98b1ef29
This commit is contained in:
138
tests/browser/features/support/env.rb
Normal file
138
tests/browser/features/support/env.rb
Normal file
@@ -0,0 +1,138 @@
|
||||
# before all
|
||||
require 'bundler/setup'
|
||||
require 'page-object'
|
||||
require 'page-object/page_factory'
|
||||
require 'watir-webdriver'
|
||||
require 'yaml'
|
||||
|
||||
World(PageObject::PageFactory)
|
||||
|
||||
def browser(environment, test_name, saucelabs_username, saucelabs_key, language)
|
||||
if environment == :cloudbees
|
||||
sauce_browser(test_name, saucelabs_username, saucelabs_key, language)
|
||||
else
|
||||
local_browser(language)
|
||||
end
|
||||
end
|
||||
def environment
|
||||
if ENV['ENVIRONMENT'] == 'cloudbees'
|
||||
:cloudbees
|
||||
else
|
||||
:local
|
||||
end
|
||||
end
|
||||
def local_browser(language)
|
||||
if ENV['BROWSER_LABEL']
|
||||
browser_label = ENV['BROWSER_LABEL'].to_sym
|
||||
else
|
||||
browser_label = :firefox
|
||||
end
|
||||
|
||||
if language == 'default'
|
||||
Watir::Browser.new browser_label
|
||||
else
|
||||
if browser_label == :firefox
|
||||
profile = Selenium::WebDriver::Firefox::Profile.new
|
||||
elsif browser_label == :chrome
|
||||
profile = Selenium::WebDriver::Chrome::Profile.new
|
||||
else
|
||||
raise "Changing default language is currently supported only for Firefox and Chrome!"
|
||||
end
|
||||
profile['intl.accept_languages'] = language
|
||||
Watir::Browser.new browser_label, :profile => profile
|
||||
end
|
||||
end
|
||||
def sauce_api(json, saucelabs_username, saucelabs_key)
|
||||
%x{curl -H 'Content-Type:text/json' -s -X PUT -d '#{json}' http://#{saucelabs_username}:#{saucelabs_key}@saucelabs.com/rest/v1/#{saucelabs_username}/jobs/#{$session_id}}
|
||||
end
|
||||
def sauce_browser(test_name, saucelabs_username, saucelabs_key, language)
|
||||
config = YAML.load_file('config/config.yml')
|
||||
browser_label = config[ENV['BROWSER_LABEL']]
|
||||
|
||||
if language == 'default'
|
||||
caps = Selenium::WebDriver::Remote::Capabilities.send(browser_label['name'])
|
||||
elsif browser_label['name'] == 'firefox'
|
||||
profile = Selenium::WebDriver::Firefox::Profile.new
|
||||
profile['intl.accept_languages'] = language
|
||||
caps = Selenium::WebDriver::Remote::Capabilities.firefox(:firefox_profile => profile)
|
||||
elsif browser_label['name'] == 'chrome'
|
||||
profile = Selenium::WebDriver::Chrome::Profile.new
|
||||
profile['intl.accept_languages'] = language
|
||||
caps = Selenium::WebDriver::Remote::Capabilities.chrome('chrome.profile' => profile.as_json['zip'])
|
||||
end
|
||||
|
||||
caps.platform = browser_label['platform']
|
||||
caps.version = browser_label['version']
|
||||
caps[:name] = "#{test_name} #{ENV['JOB_NAME']}##{ENV['BUILD_NUMBER']}"
|
||||
|
||||
require 'selenium/webdriver/remote/http/persistent' # http_client
|
||||
browser = Watir::Browser.new(
|
||||
:remote,
|
||||
http_client: Selenium::WebDriver::Remote::Http::Persistent.new,
|
||||
url: "http://#{saucelabs_username}:#{saucelabs_key}@ondemand.saucelabs.com:80/wd/hub",
|
||||
desired_capabilities: caps)
|
||||
|
||||
browser.wd.file_detector = lambda do |args|
|
||||
# args => ['/path/to/file']
|
||||
str = args.first.to_s
|
||||
str if File.exist?(str)
|
||||
end
|
||||
|
||||
browser
|
||||
end
|
||||
def secret_yml_location
|
||||
secret_yml_locations = ['/private/wmf/', 'config/']
|
||||
secret_yml_locations.each do |secret_yml_location|
|
||||
return secret_yml_location if File.exists?("#{secret_yml_location}secret.yml")
|
||||
end
|
||||
nil
|
||||
end
|
||||
def test_name(scenario)
|
||||
if scenario.respond_to? :feature
|
||||
"#{scenario.feature.name}: #{scenario.name}"
|
||||
elsif scenario.respond_to? :scenario_outline
|
||||
"#{scenario.scenario_outline.feature.name}: #{scenario.scenario_outline.name}: #{scenario.name}"
|
||||
end
|
||||
end
|
||||
|
||||
config = YAML.load_file('config/config.yml')
|
||||
mediawiki_username = config['mediawiki_username']
|
||||
|
||||
unless secret_yml_location == nil
|
||||
secret = YAML.load_file("#{secret_yml_location}secret.yml")
|
||||
mediawiki_password = secret['mediawiki_password']
|
||||
end
|
||||
|
||||
if ENV['ENVIRONMENT'] == 'cloudbees'
|
||||
saucelabs_username = secret['saucelabs_username']
|
||||
saucelabs_key = secret['saucelabs_key']
|
||||
end
|
||||
|
||||
Before('@language') do |scenario|
|
||||
@language = true
|
||||
@saucelabs_username = saucelabs_username
|
||||
@saucelabs_key = saucelabs_key
|
||||
@scenario = scenario
|
||||
end
|
||||
Before('@login') do
|
||||
puts "secret.yml file at /private/wmf/ or config/ is required for tests tagged @login" if secret_yml_location == nil
|
||||
end
|
||||
|
||||
Before do |scenario|
|
||||
@config = config
|
||||
@does_not_exist_page_name = Random.new.rand.to_s
|
||||
@mediawiki_username = mediawiki_username
|
||||
@mediawiki_password = mediawiki_password
|
||||
unless @language
|
||||
@browser = browser(environment, test_name(scenario), saucelabs_username, saucelabs_key, 'default')
|
||||
$session_id = @browser.driver.instance_variable_get(:@bridge).session_id
|
||||
end
|
||||
end
|
||||
|
||||
After do |scenario|
|
||||
if environment == :cloudbees
|
||||
sauce_api(%Q{{"passed": #{scenario.passed?}}}, saucelabs_username, saucelabs_key)
|
||||
sauce_api(%Q{{"public": true}}, saucelabs_username, saucelabs_key)
|
||||
end
|
||||
@browser.close unless ENV['KEEP_BROWSER_OPEN'] == 'true'
|
||||
end
|
||||
@@ -0,0 +1,30 @@
|
||||
require "page-object"
|
||||
|
||||
module InterlanguagePageModule
|
||||
include PageObject
|
||||
|
||||
a(:add_links, id: 'wbc-linkToItem-link')
|
||||
span(:apply_settings, class: 'uls-settings-trigger')
|
||||
a(:back_to_display, text: 'Back to display settings')
|
||||
a(:back_to_input, text: 'Back to input settings')
|
||||
button(:cancel, class: 'button uls-display-settings-cancel')
|
||||
span(:cog, class: 'uls-settings-trigger')
|
||||
select_list(:content_font_selectbox, id: 'content-font-selector')
|
||||
button(:default_language_button, class: 'button uls-language-button down')
|
||||
button(:disable_input_methods, class: 'active green button uls-input-toggle-button')
|
||||
button(:ellipsis_button, class: 'uls-more-languages button')
|
||||
button(:enable_input, class: 'active green button uls-input-toggle-button')
|
||||
a(:english_link, text: 'English')
|
||||
button(:fonts_button, id: 'uls-display-settings-fonts-tab')
|
||||
button(:fonts_settings, id: 'uls-display-settings-fonts-tab')
|
||||
div(:input_settings, id: 'input-settings-block')
|
||||
button(:language_button, id: 'uls-display-settings-language-tab')
|
||||
div(:language_list, class: 'row uls-language-list lcd')
|
||||
text_field(:language_search, id: 'languagefilter')
|
||||
button(:non_default_language, class: 'button uls-language-button', index: 1)
|
||||
button(:other_language_button, class: 'button uls-language-button')
|
||||
a(:talk, text: 'Discussion')
|
||||
select_list(:ui_font_selectbox, id: 'ui-font-selector')
|
||||
span(:x, id: 'languagesettings-close')
|
||||
a(:how_to_use_ml_transliteration, href: 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:UniversalLanguageSelector/Input_methods/ml-transliteration')
|
||||
end
|
||||
10
tests/browser/features/support/modules/url_module.rb
Normal file
10
tests/browser/features/support/modules/url_module.rb
Normal file
@@ -0,0 +1,10 @@
|
||||
module URL
|
||||
def self.url(name)
|
||||
if ENV['MEDIAWIKI_URL']
|
||||
mediawiki_url = ENV['MEDIAWIKI_URL']
|
||||
else
|
||||
mediawiki_url = 'http://en.wikipedia.beta.wmflabs.org/wiki/'
|
||||
end
|
||||
"#{mediawiki_url}#{name}"
|
||||
end
|
||||
end
|
||||
11
tests/browser/features/support/pages/interlanguage_page.rb
Normal file
11
tests/browser/features/support/pages/interlanguage_page.rb
Normal file
@@ -0,0 +1,11 @@
|
||||
class InterlanguagePage
|
||||
include PageObject
|
||||
|
||||
include URL
|
||||
def self.url
|
||||
URL.url('Boleyn_family')
|
||||
end
|
||||
page_url url
|
||||
|
||||
include InterlanguagePageModule
|
||||
end
|
||||
23
tests/browser/features/support/pages/login_page.rb
Normal file
23
tests/browser/features/support/pages/login_page.rb
Normal file
@@ -0,0 +1,23 @@
|
||||
class LoginPage
|
||||
include PageObject
|
||||
|
||||
include URL
|
||||
page_url URL.url('Special:UserLogin')
|
||||
|
||||
div(:feedback, class: 'errorbox')
|
||||
button(:login, id: 'wpLoginAttempt')
|
||||
text_field(:password, id: 'wpPassword1')
|
||||
a(:password_strength, text: 'password strength')
|
||||
a(:phishing, text: 'phishing')
|
||||
text_field(:username, id: 'wpName1')
|
||||
a(:username_displayed, title: /Your user page/)
|
||||
|
||||
def logged_in_as_element
|
||||
@browser.div(id: 'mw-content-text').p.b
|
||||
end
|
||||
def login_with(username, password)
|
||||
self.username = username
|
||||
self.password = password
|
||||
login
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,11 @@
|
||||
class NoInterlanguagePage
|
||||
include PageObject
|
||||
|
||||
include URL
|
||||
def self.url
|
||||
URL.url('Think_Like_a_Cat')
|
||||
end
|
||||
page_url url
|
||||
|
||||
include InterlanguagePageModule
|
||||
end
|
||||
27
tests/browser/features/support/pages/random_page.rb
Normal file
27
tests/browser/features/support/pages/random_page.rb
Normal file
@@ -0,0 +1,27 @@
|
||||
class RandomPage
|
||||
include PageObject
|
||||
|
||||
include URL
|
||||
page_url URL.url('Special:Random')
|
||||
|
||||
span(:cog, title: 'Language settings')
|
||||
a(:create_a_book, text: 'Create a book')
|
||||
a(:download_as_pdf, text: 'Download as PDF')
|
||||
a(:download_the_file, text: 'Download the file')
|
||||
div(:input_method, class: 'imeselector imeselector-toggle')
|
||||
a(:input_method_enabled, class: 'ime-name imeselector-toggle')
|
||||
h3(:input_method_ime_list_title, class: 'ime-list-title')
|
||||
ul(:input_method_language_list, class: 'ime-language-list')
|
||||
div(:input_method_selector_menu, class: 'imeselector-menu')
|
||||
text_field(:language_filter, id: 'languagefilter')
|
||||
div(:language_settings_dialog, id: 'language-settings-dialog')
|
||||
li(:main_page, id: 'n-mainpage-description')
|
||||
a(:malayalam_link, title: 'Malayalam')
|
||||
a(:more_languages, class: 'ime-selector-more-languages')
|
||||
a(:print_export, text: 'Print/export')
|
||||
a(:printable_version, text: 'Printable version')
|
||||
li(:uls_malayalam_inscript2_item, data_ime_inputmethod: 'ml-inscript2')
|
||||
button(:search_button, id: 'searchButton')
|
||||
text_field(:search_input, id: 'searchInput')
|
||||
a(:uls_trigger, class: 'uls-trigger')
|
||||
end
|
||||
10
tests/browser/features/support/sauce.rb
Normal file
10
tests/browser/features/support/sauce.rb
Normal file
@@ -0,0 +1,10 @@
|
||||
require 'cucumber/formatter/junit'
|
||||
|
||||
module Cucumber::Formatter
|
||||
class Sauce < Junit
|
||||
def format_exception(exception)
|
||||
sauce_job_page = "Sauce Labs job URL: http://saucelabs.com/jobs/#{$session_id}\n"
|
||||
([sauce_job_page] + ["#{exception.message} (#{exception.class})"] + exception.backtrace).join("\n")
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user