From 2547ed87b56db17bafbb3da66537756da331264f Mon Sep 17 00:00:00 2001 From: Zeljko Filipin Date: Mon, 26 Aug 2013 16:43:06 +0200 Subject: [PATCH] Moved ULS tests from browsertests repository Change-Id: I4f4a4c5530ad7e5dff70171b59a589dc98b1ef29 --- tests/browser/Gemfile | 11 ++ tests/browser/Gemfile.lock | 56 ++++++ tests/browser/README.md | 1 + tests/browser/config/config.yml | 36 ++++ tests/browser/config/cucumber.yml | 2 + .../features/step_definitions/common_steps.rb | 7 + .../uls_accept_language_steps.rb | 12 ++ .../uls_cog_sidebar_user_steps.rb | 160 ++++++++++++++++++ .../step_definitions/uls_ime_steps.rb | 69 ++++++++ .../features/step_definitions/uls_steps.rb | 11 ++ tests/browser/features/support/env.rb | 138 +++++++++++++++ .../support/modules/interlanguage_module.rb | 30 ++++ .../features/support/modules/url_module.rb | 10 ++ .../support/pages/interlanguage_page.rb | 11 ++ .../features/support/pages/login_page.rb | 23 +++ .../support/pages/no_interlanguage_page.rb | 11 ++ .../features/support/pages/random_page.rb | 27 +++ tests/browser/features/support/sauce.rb | 10 ++ tests/browser/features/uls.feature | 12 ++ .../features/uls_accept_language.feature | 14 ++ .../uls_cog_sidebar_anon_user.feature | 74 ++++++++ .../uls_cog_sidebar_logged_user.feature | 68 ++++++++ tests/browser/features/uls_ime.feature | 51 ++++++ 23 files changed, 844 insertions(+) create mode 100755 tests/browser/Gemfile create mode 100644 tests/browser/Gemfile.lock create mode 100644 tests/browser/README.md create mode 100644 tests/browser/config/config.yml create mode 100644 tests/browser/config/cucumber.yml create mode 100644 tests/browser/features/step_definitions/common_steps.rb create mode 100644 tests/browser/features/step_definitions/uls_accept_language_steps.rb create mode 100644 tests/browser/features/step_definitions/uls_cog_sidebar_user_steps.rb create mode 100644 tests/browser/features/step_definitions/uls_ime_steps.rb create mode 100644 tests/browser/features/step_definitions/uls_steps.rb create mode 100644 tests/browser/features/support/env.rb create mode 100644 tests/browser/features/support/modules/interlanguage_module.rb create mode 100644 tests/browser/features/support/modules/url_module.rb create mode 100644 tests/browser/features/support/pages/interlanguage_page.rb create mode 100644 tests/browser/features/support/pages/login_page.rb create mode 100644 tests/browser/features/support/pages/no_interlanguage_page.rb create mode 100644 tests/browser/features/support/pages/random_page.rb create mode 100644 tests/browser/features/support/sauce.rb create mode 100644 tests/browser/features/uls.feature create mode 100644 tests/browser/features/uls_accept_language.feature create mode 100644 tests/browser/features/uls_cog_sidebar_anon_user.feature create mode 100644 tests/browser/features/uls_cog_sidebar_logged_user.feature create mode 100644 tests/browser/features/uls_ime.feature diff --git a/tests/browser/Gemfile b/tests/browser/Gemfile new file mode 100755 index 00000000..d38e5939 --- /dev/null +++ b/tests/browser/Gemfile @@ -0,0 +1,11 @@ +#ruby=ruby-2.0.0-p247 +#ruby-gemset=UniversalLanguageSelector + +source 'https://rubygems.org' + +gem 'cucumber' +gem 'json' +gem 'net-http-persistent' +gem 'page-object' +gem 'rspec-expectations' +gem 'syntax' diff --git a/tests/browser/Gemfile.lock b/tests/browser/Gemfile.lock new file mode 100644 index 00000000..fc6f9f00 --- /dev/null +++ b/tests/browser/Gemfile.lock @@ -0,0 +1,56 @@ +GEM + remote: https://rubygems.org/ + specs: + builder (3.2.2) + childprocess (0.3.9) + ffi (~> 1.0, >= 1.0.11) + cucumber (1.3.6) + builder (>= 2.1.2) + diff-lcs (>= 1.1.3) + gherkin (~> 2.12.0) + multi_json (~> 1.7.5) + multi_test (>= 0.0.2) + data_magic (0.15.2) + faker (>= 1.1.2) + yml_reader (>= 0.2) + diff-lcs (1.2.4) + faker (1.2.0) + i18n (~> 0.5) + ffi (1.9.0) + gherkin (2.12.1) + multi_json (~> 1.3) + i18n (0.6.5) + json (1.8.0) + multi_json (1.7.9) + multi_test (0.0.2) + net-http-persistent (2.9) + page-object (0.9.2) + page_navigation (>= 0.8) + selenium-webdriver (>= 2.35.0) + watir-webdriver (>= 0.6.4) + page_navigation (0.9) + data_magic (>= 0.14) + rspec-expectations (2.14.2) + diff-lcs (>= 1.1.3, < 2.0) + rubyzip (0.9.9) + selenium-webdriver (2.35.0) + childprocess (>= 0.2.5) + multi_json (~> 1.0) + rubyzip + websocket (~> 1.0.4) + syntax (1.0.0) + watir-webdriver (0.6.4) + selenium-webdriver (>= 2.18.0) + websocket (1.0.7) + yml_reader (0.2) + +PLATFORMS + ruby + +DEPENDENCIES + cucumber + json + net-http-persistent + page-object + rspec-expectations + syntax diff --git a/tests/browser/README.md b/tests/browser/README.md new file mode 100644 index 00000000..3c5449a0 --- /dev/null +++ b/tests/browser/README.md @@ -0,0 +1 @@ +Please see https://github.com/wikimedia/qa-browsertests for instructions on how to run tests. diff --git a/tests/browser/config/config.yml b/tests/browser/config/config.yml new file mode 100644 index 00000000..17db808e --- /dev/null +++ b/tests/browser/config/config.yml @@ -0,0 +1,36 @@ +mediawiki_username: Selenium_user + +chrome: + name: chrome + platform: Linux + version: + +firefox: + name: firefox + platform: Linux + version: 23 + +internet_explorer_6: + name: internet_explorer + platform: Windows XP + version: 6 + +internet_explorer_7: + name: internet_explorer + platform: Windows XP + version: 7 + +internet_explorer_8: + name: internet_explorer + platform: Windows XP + version: 8 + +internet_explorer_9: + name: internet_explorer + platform: Windows 7 + version: 9 + +internet_explorer_10: + name: internet_explorer + platform: Windows 8 + version: 10 diff --git a/tests/browser/config/cucumber.yml b/tests/browser/config/cucumber.yml new file mode 100644 index 00000000..150c2840 --- /dev/null +++ b/tests/browser/config/cucumber.yml @@ -0,0 +1,2 @@ +ci: --format Cucumber::Formatter::Sauce --out reports/junit +default: --format progress diff --git a/tests/browser/features/step_definitions/common_steps.rb b/tests/browser/features/step_definitions/common_steps.rb new file mode 100644 index 00000000..7886fc62 --- /dev/null +++ b/tests/browser/features/step_definitions/common_steps.rb @@ -0,0 +1,7 @@ +Given(/^I am at random page$/) do + visit RandomPage +end + +Given(/^I am logged in$/) do + visit(LoginPage).login_with(@mediawiki_username, @mediawiki_password) +end diff --git a/tests/browser/features/step_definitions/uls_accept_language_steps.rb b/tests/browser/features/step_definitions/uls_accept_language_steps.rb new file mode 100644 index 00000000..b13422fc --- /dev/null +++ b/tests/browser/features/step_definitions/uls_accept_language_steps.rb @@ -0,0 +1,12 @@ +Given(/^that my browser's accept language is (.+)$/) do |language| + @browser = browser(environment, test_name(@scenario), @saucelabs_username, @saucelabs_key, language) + $session_id = @browser.driver.instance_variable_get(:@bridge).session_id +end + +When(/^I visit a random page$/) do + visit(RandomPage) +end + +Then(/^link to the main page has text (.+)$/) do |text| + on(RandomPage).main_page_element.text.should == text +end diff --git a/tests/browser/features/step_definitions/uls_cog_sidebar_user_steps.rb b/tests/browser/features/step_definitions/uls_cog_sidebar_user_steps.rb new file mode 100644 index 00000000..2ebe1bb1 --- /dev/null +++ b/tests/browser/features/step_definitions/uls_cog_sidebar_user_steps.rb @@ -0,0 +1,160 @@ +Given(/^I am on a page with interlanguage links$/) do + visit InterlanguagePage +end + +Given(/^I am on a page without interlanguage links$/) do + visit NoInterlanguagePage # .add_links_element.when_visible.should be_visible + # cannot do this because of https://bugzilla.wikimedia.org/show_bug.cgi?id=49139 +end + +Given(/^I am on a talk page with interlanguage links$/) do + visit(InterlanguagePage).talk_element.click +end + +Given(/^I am on a talk page without interlanguage links$/) do + visit(NoInterlanguagePage).talk_element.click +end + +Given(/^I navigate to the anonymous Language Settings panel$/) do + step 'I am on a page with interlanguage links' + step 'I click the cog icon by Languages in the sidebar' + step 'I see the anonymous Language Settings panel' +end + +Given(/^I navigate to the Language Settings panel$/) do + step 'I am on a page with interlanguage links' + step 'I click the cog icon by Languages in the sidebar' + step 'I see the Language Settings panel' +end + +When(/^I click Apply Settings$/) do + on(InterlanguagePage).apply_settings_element.click +end + +When(/^I click Cancel$/) do + on(InterlanguagePage).cancel_element.click +end + +Then(/^I click Enable input$/) do + on(InterlanguagePage).enable_input_element.when_visible.click +end + +When(/^I click Fonts$/) do + on(InterlanguagePage).fonts_settings +end + +When(/^I click Input$/) do + on(InterlanguagePage).input_settings_element.click +end + +When(/^I click on the link to select Malayalam$/) do + on(RandomPage).malayalam_link +end + +When(/^I click the button with the ellipsis$/) do + on(InterlanguagePage).ellipsis_button_element.click +end + +When(/^I click the cog icon by Languages in the sidebar$/) do + on(NoInterlanguagePage).cog_element.when_present.click +end + +When(/^I click X$/) do + on(InterlanguagePage).x_element.click +end + +When(/^I navigate to the talk page$/) do + on(InterlanguagePage).talk_element.click +end + +When(/^in the language filter I type (.+)$/) do |language_abbreviation| + on(RandomPage).language_filter=language_abbreviation +end + +Then(/^a font selectbox appears$/) do + on(InterlanguagePage).content_font_selectbox_element.should be_visible +end + +Then(/^I can disable input methods$/) do + on(InterlanguagePage).disable_input_methods_element.when_visible.should be_visible +end + +Then(/^I can enable input methods$/) do + on(InterlanguagePage).enable_input_element.when_visible.should be_visible +end + +Then(/^I can navigate back to Input Settings$/) do + on(InterlanguagePage) do |page| + page.back_to_input + page.x_element.should be_visible + end +end + +Then(/^I can navigate back to Language Settings$/) do + on(InterlanguagePage) do |page| + page.back_to_display + page.x_element.should be_visible + end +end + +When(/^I choose a different language for writing$/) do + on(InterlanguagePage).non_default_language_element.when_visible.click +end + +Then(/^I do not see the Language Settings panel$/) do + on(InterlanguagePage) do |page| + page.language_button_element.should_not be_visible + page.fonts_button_element.should_not be_visible + page.default_language_button_element.should_not be_visible + page.other_language_button_element.should_not be_visible + end +end + +Then(/^I see Common Languages$/) do + on(InterlanguagePage).language_list.should match Regexp.escape('Common languages') +end + +Then(/^I see Language Search$/) do + on(InterlanguagePage).language_search_element.should be_visible +end + +Then(/^I see the anonymous Language Settings panel$/) do + on(NoInterlanguagePage) do |page| + page.language_button_element.when_present.should be_visible + page.fonts_button_element.should be_visible + end +end + +Then(/^I see the Language Settings panel$/) do + on(NoInterlanguagePage) do |page| + page.language_button_element.when_present.should be_visible + page.fonts_button_element.should be_visible + page.default_language_button_element.should be_visible + page.other_language_button_element.should be_visible + end +end + +Then(/^I see Worldwide$/) do + on(InterlanguagePage) do |page| + page.language_list.should match Regexp.escape('Worldwide') + page.english_link_element.should be_visible + end +end + +Then(/^the cog icon brings up anonymous Language Settings again$/) do + step 'I click the cog icon by Languages in the sidebar' + step 'I see the anonymous Language Settings panel' +end + +Then(/^the cog icon brings up Language Settings again$/) do + step 'I click the cog icon by Languages in the sidebar' + step 'I see the Language Settings panel' +end + +Then(/^a font selectbox appears for content$/) do + on(InterlanguagePage).content_font_selectbox_element.should be_visible +end + +Then(/^I should see the How to use link near the Malayalam transliteration item$/) do + on(InterlanguagePage).how_to_use_ml_transliteration_element.should be_visible +end diff --git a/tests/browser/features/step_definitions/uls_ime_steps.rb b/tests/browser/features/step_definitions/uls_ime_steps.rb new file mode 100644 index 00000000..01a154b5 --- /dev/null +++ b/tests/browser/features/step_definitions/uls_ime_steps.rb @@ -0,0 +1,69 @@ +# encoding: utf-8 + +Given(/^I am on a wiki in Kotava language$/) do + visit(RandomPage) + # Fake a Kotava Wiki + @browser.execute_script( "mw.config.set( 'wgContentLanguage', 'avk' )" ) +end + +When(/^I click on an input box$/) do + on(RandomPage) do |page| + page.search_input_element.click + # For some reason click alone doesn't seem to trigger the ime indicator + # when running tests + page.search_input_element.send_keys ' ' + end +end + +When(/^I click on the input method indicator$/) do + on(RandomPage).input_method_element.click +end + +When(/^I open the input method menu$/) do + on(RandomPage) do |page| + page.search_input_element.click + page.search_input_element.send_keys ' ' + page.input_method_element.click + end +end + +Then(/^I should see the input method indicator$/) do + on(RandomPage).input_method_element.should be_visible +end + +Then(/^I should see input methods for (.+)/) do |language| + on(RandomPage).input_method_ime_list_title.should == language +end + +Then(/^I should see a list of available input methods$/) do + on(RandomPage).input_method_selector_menu_element.should be_visible +end + +Then(/^I should see a list of suggested languages$/) do + on(RandomPage).input_method_language_list_element.should be_visible +end + +When(/^I choose (.+?) as the input language$/) do |language| + on(RandomPage) do |page| + page.more_languages + page.language_filter = language + page.language_filter_element.send_keys :return + end +end + +When(/^I click on the Malayalam InScript 2 menu item$/) do + on(RandomPage).uls_malayalam_inscript2_item_element.click +end + +When(/^I press Control\-M$/) do + on(RandomPage).search_input_element.send_keys [:control, 'm'] +end + +When(/^I go to another random page$/) do + visit(RandomPage) +end + +Then(/^in it there must be an element with Malayalam text$/) do + # 'input_method_enabled' alone only returns [] + on(RandomPage).input_method_enabled_element.text.should == 'ഇൻസ്ക്രിപ്റ്റ് 2' +end diff --git a/tests/browser/features/step_definitions/uls_steps.rb b/tests/browser/features/step_definitions/uls_steps.rb new file mode 100644 index 00000000..cb3372a1 --- /dev/null +++ b/tests/browser/features/step_definitions/uls_steps.rb @@ -0,0 +1,11 @@ +When(/^I click language selector trigger element$/) do + on(RandomPage).uls_trigger +end + +Then(/^I should see the Language selector$/) do + on(RandomPage).language_settings_dialog_element.should be_visible +end + +Then(/^I should see a cog icon near the 'Languages' header$/) do + on(RandomPage).cog_element.should exist +end diff --git a/tests/browser/features/support/env.rb b/tests/browser/features/support/env.rb new file mode 100644 index 00000000..75f62b59 --- /dev/null +++ b/tests/browser/features/support/env.rb @@ -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 diff --git a/tests/browser/features/support/modules/interlanguage_module.rb b/tests/browser/features/support/modules/interlanguage_module.rb new file mode 100644 index 00000000..59993323 --- /dev/null +++ b/tests/browser/features/support/modules/interlanguage_module.rb @@ -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 diff --git a/tests/browser/features/support/modules/url_module.rb b/tests/browser/features/support/modules/url_module.rb new file mode 100644 index 00000000..62685464 --- /dev/null +++ b/tests/browser/features/support/modules/url_module.rb @@ -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 diff --git a/tests/browser/features/support/pages/interlanguage_page.rb b/tests/browser/features/support/pages/interlanguage_page.rb new file mode 100644 index 00000000..9da26452 --- /dev/null +++ b/tests/browser/features/support/pages/interlanguage_page.rb @@ -0,0 +1,11 @@ +class InterlanguagePage + include PageObject + + include URL + def self.url + URL.url('Boleyn_family') + end + page_url url + + include InterlanguagePageModule +end diff --git a/tests/browser/features/support/pages/login_page.rb b/tests/browser/features/support/pages/login_page.rb new file mode 100644 index 00000000..6890050c --- /dev/null +++ b/tests/browser/features/support/pages/login_page.rb @@ -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 diff --git a/tests/browser/features/support/pages/no_interlanguage_page.rb b/tests/browser/features/support/pages/no_interlanguage_page.rb new file mode 100644 index 00000000..30846ba0 --- /dev/null +++ b/tests/browser/features/support/pages/no_interlanguage_page.rb @@ -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 diff --git a/tests/browser/features/support/pages/random_page.rb b/tests/browser/features/support/pages/random_page.rb new file mode 100644 index 00000000..54ddb242 --- /dev/null +++ b/tests/browser/features/support/pages/random_page.rb @@ -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 diff --git a/tests/browser/features/support/sauce.rb b/tests/browser/features/support/sauce.rb new file mode 100644 index 00000000..63eaeaaf --- /dev/null +++ b/tests/browser/features/support/sauce.rb @@ -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 diff --git a/tests/browser/features/uls.feature b/tests/browser/features/uls.feature new file mode 100644 index 00000000..42e78884 --- /dev/null +++ b/tests/browser/features/uls.feature @@ -0,0 +1,12 @@ +@sandbox.translatewiki.net +Feature: Universal Language Selector User language selector + + @test2.wikipedia.org + Scenario: Open Language selector + Given I visit a random page + When I click language selector trigger element + Then I should see the Language selector + + Scenario: The cog icon is visible in the sidebar on an article + Given I am at random page + Then I should see a cog icon near the 'Languages' header diff --git a/tests/browser/features/uls_accept_language.feature b/tests/browser/features/uls_accept_language.feature new file mode 100644 index 00000000..d0615711 --- /dev/null +++ b/tests/browser/features/uls_accept_language.feature @@ -0,0 +1,14 @@ +@ie6-bug @ie7-bug @ie8-bug @ie9-bug @language @sandbox.translatewiki.net +Feature: Universal Language Selector Accept-Language + + Scenario Outline: Accept-Language + Given that my browser's accept language is + When I visit a random page + Then link to the main page has text + + Examples: + | language | text | + | de | Hauptseite | + | sr | Главна страна | + | sr-ec | Главна страна | + | sr-el | Glavna strana | diff --git a/tests/browser/features/uls_cog_sidebar_anon_user.feature b/tests/browser/features/uls_cog_sidebar_anon_user.feature new file mode 100644 index 00000000..aac0011e --- /dev/null +++ b/tests/browser/features/uls_cog_sidebar_anon_user.feature @@ -0,0 +1,74 @@ +@en.wikipedia.beta.wmflabs.org @ie6-bug @ie7-bug +Feature: ULS cog behaviour on the side-bar for logged in users + + Scenario: Page without interlanguage links has cog icon and language selector + Given I am on a page without interlanguage links + When I click the cog icon by Languages in the sidebar + Then I see the anonymous Language Settings panel + + Scenario: Page with interlanguage links has cog icon and language selector + Given I am on a page with interlanguage links + When I click the cog icon by Languages in the sidebar + Then I see the anonymous Language Settings panel + + Scenario: Page without interlanguage links has cog icon and language selector on Talk page + Given I am on a talk page without interlanguage links + When I click the cog icon by Languages in the sidebar + Then I see the anonymous Language Settings panel + + Scenario: Page with interlanguage links has cog icon and language selector on Talk page + Given I am on a talk page with interlanguage links + When I click the cog icon by Languages in the sidebar + Then I see the anonymous Language Settings panel + + Scenario: Language Settings closes and opens with X button + Given I navigate to the anonymous Language Settings panel + When I click X + Then I do not see the Language Settings panel + And the cog icon brings up anonymous Language Settings again + + Scenario: Language Settings closes and opens with Apply Settings buttons + Given I navigate to the anonymous Language Settings panel + When I click Apply Settings + Then I do not see the Language Settings panel + And the cog icon brings up anonymous Language Settings again + + Scenario: Language Settings closes and opens with Cancel buttons + Given I navigate to the anonymous Language Settings panel + When I click Cancel + Then I do not see the Language Settings panel + And the cog icon brings up anonymous Language Settings again + + Scenario: Input settings display + Given I navigate to the anonymous Language Settings panel + When I click Input + Then I can enable input methods + And I can disable input methods + + Scenario: How to use link appears in the Input settings panel + Given I navigate to the anonymous Language Settings panel + When I click Input + And I click Enable input + And I click the button with the ellipsis + And in the language filter I type ml + And I click on the link to select Malayalam + Then I should see the How to use link near the Malayalam transliteration item + + Scenario: Fonts default settings and display + Given I navigate to the anonymous Language Settings panel + When I click Fonts + Then a font selectbox appears + + Scenario: Fonts not default settings and display + Given I navigate to the anonymous Language Settings panel + When I click Fonts + Then a font selectbox appears for content + + Scenario: More languages + Given I navigate to the anonymous Language Settings panel + And I click Input + And I click Enable input + When I click the button with the ellipsis + Then I see Worldwide + And I see Language Search + And I can navigate back to Input Settings diff --git a/tests/browser/features/uls_cog_sidebar_logged_user.feature b/tests/browser/features/uls_cog_sidebar_logged_user.feature new file mode 100644 index 00000000..9ce7ed46 --- /dev/null +++ b/tests/browser/features/uls_cog_sidebar_logged_user.feature @@ -0,0 +1,68 @@ +@en.wikipedia.beta.wmflabs.org @login @ie6-bug @ie7-bug +Feature: ULS cog behaviour on the side-bar for logged in users + + Background: + Given I am logged in + + Scenario: Page without interlanguage links has cog icon and language selector + Given I am on a page without interlanguage links + When I click the cog icon by Languages in the sidebar + Then I see the Language Settings panel + + Scenario: Page with interlanguage links has cog icon and language selector + Given I am on a page with interlanguage links + When I click the cog icon by Languages in the sidebar + Then I see the Language Settings panel + + Scenario: Page without interlanguage links has cog icon and language selector on Talk page + Given I am on a talk page without interlanguage links + When I click the cog icon by Languages in the sidebar + Then I see the Language Settings panel + + Scenario: Page with interlanguage links has cog icon and language selector on Talk page + Given I am on a talk page with interlanguage links + When I click the cog icon by Languages in the sidebar + Then I see the Language Settings panel + + Scenario: Language Settings closes and opens with X button + Given I navigate to the Language Settings panel + When I click X + Then I do not see the Language Settings panel + And the cog icon brings up Language Settings again + + Scenario: Language Settings closes and opens with Apply Settings buttons + Given I navigate to the Language Settings panel + When I click Apply Settings + Then I do not see the Language Settings panel + And the cog icon brings up Language Settings again + + Scenario: Language Settings closes and opens with Cancel buttons + Given I navigate to the Language Settings panel + When I click Cancel + Then I do not see the Language Settings panel + And the cog icon brings up Language Settings again + + Scenario: Input settings display + Given I navigate to the Language Settings panel + When I click Input + Then I can enable input methods + And I can disable input methods + + Scenario: Fonts default settings and display + Given I navigate to the Language Settings panel + When I click Fonts + Then a font selectbox appears + + Scenario: Fonts not default settings and display + Given I navigate to the Language Settings panel + When I choose a different language for writing + And I click Fonts + Then a font selectbox appears for content + + Scenario: More languages + Given I navigate to the Language Settings panel + When I click the button with the ellipsis + Then I see Common Languages + And I see Worldwide + And I see Language Search + And I can navigate back to Language Settings diff --git a/tests/browser/features/uls_ime.feature b/tests/browser/features/uls_ime.feature new file mode 100644 index 00000000..31f8c489 --- /dev/null +++ b/tests/browser/features/uls_ime.feature @@ -0,0 +1,51 @@ +@commons.wikimedia.beta.wmflabs.org +Feature: Universal Language Selector input method engine + +User is able to select among different input methods via a menu which is +activated by the input method indicator. User can type with selected input +method in different input fields and temporarily activate and deactivate the +input method. + + Scenario: Input method indicator is shown + + The input method indicator is shown when input field gets a focus. + + Given I am at random page + When I click on an input box + Then I should see the input method indicator + + Scenario: Input method menu + + Input method menu is shown when user clicks the input method indicator. + + Given I am at random page + When I click on an input box + And I click on the input method indicator + Then I should see input methods for English + And I should see a list of available input methods + And I should see a list of suggested languages + + Scenario: Unsupported input language + + User visits a wiki with content language that does not have have an input + method. + + Given I am on a wiki in Kotava language + When I open the input method menu + Then I should see input methods for Kotava + + Scenario: Sticky input methods + + Chosen input method selection persists across page loads. + + Given I am at random page + When I open the input method menu + And I choose ml as the input language + And I open the input method menu + And I click on the Malayalam InScript 2 menu item + And I press Control-M + And I go to another random page + And I click on an input box + And I press Control-M + Then I should see the input method indicator + And in it there must be an element with Malayalam text