jenkins-bot has submitted this change and it was merged. Change subject: Selenium tests for coordinate UI ......................................................................
Selenium tests for coordinate UI Bug: 49234 Change-Id: I895770f349afe8608d9eec044666e6c52905a2c8 --- A repo/tests/selenium/statements/statements_coordinate_spec.rb M repo/tests/selenium/statements/statements_time_spec.rb M selenium/Rakefile A selenium/lib/modules/coordinate_module.rb A selenium/lib/modules/input_extender_module.rb M selenium/lib/modules/time_module.rb M selenium/lib/pages/entity_page.rb 7 files changed, 242 insertions(+), 19 deletions(-) Approvals: Henning Snater: Looks good to me, approved jenkins-bot: Verified diff --git a/repo/tests/selenium/statements/statements_coordinate_spec.rb b/repo/tests/selenium/statements/statements_coordinate_spec.rb new file mode 100644 index 0000000..0af58fa --- /dev/null +++ b/repo/tests/selenium/statements/statements_coordinate_spec.rb @@ -0,0 +1,154 @@ +# -*- encoding : utf-8 -*- +# Wikidata UI tests +# +# Author:: Tobias Gritschacher ([email protected]) +# License:: GNU GPL v2+ +# +# tests for coordinate type statements + +require 'spec_helper' + +item_label = generate_random_string(10) +item_description = generate_random_string(20) +prop_label = generate_random_string(10) +prop_description = generate_random_string(20) +prop_datatype = "Geographic coordinate" +not_recognized = "no valid value recognized" +# utf8 code for ° sign: \u00B0 +coordinate_values = Array.new +coordinate_values.push({ + "input" => "41°50'13\"N, 87°41'44\"W", + "precision" => "auto", + "expected_precision" => "to an arcsecond", + "expected_preview" => "41°50'13\"N, 87°41'44\"W" +}) +coordinate_values.push({ + "input" => "41°50'N, 87°41'W", + "precision" => "auto", + "expected_precision" => "to an arcminute", + "expected_preview" => "41°50'N, 87°41'W" +}) +coordinate_values.push({ + "input" => "41°50'13\"N, 87°41'44\"W", + "precision" => "to an arcminute", + "expected_precision" => "to an arcminute", + "expected_preview" => "41°50'N, 87°41'W" +}) +coordinate_values.push({ + "input" => "42.1538 8.5731", + "precision" => "auto", + "expected_precision" => "±0.0001°", + "expected_preview" => "42°9'13.7\"N, 8°34'23.2\"E" +}) +#this is not supported by the frontend parser! +#coordinate_values.push({ +# "input" => "42° 09.231 N 008° 34.386 E", +# "precision" => "auto", +# "expected_precision" => "to 1/100 of an arcsecond", +# "expected_preview" => "42°9'13.86\"N, 8°34'23.16\"E" +#}) +coordinate_values.push({ + "input" => "stuff", + "precision" => "auto", + "expected_precision" => "to a degree", + "expected_preview" => not_recognized +}) + +describe "Check coordinate statements UI", :exclude_chrome => true do + before :all do + # set up: create item & properties + visit_page(CreateItemPage) do |page| + page.create_new_item(item_label, item_description) + end + visit_page(NewPropertyPage) do |page| + page.create_new_property(prop_label, prop_description, prop_datatype) + end + end + + context "Check coordinate UI" do + it "should check coordinate input extender behaviour" do + on_page(ItemPage) do |page| + page.navigate_to_item + page.wait_for_entity_to_load + page.addStatement + page.entitySelectorInput = prop_label + ajax_wait + page.wait_for_entity_selector_list + page.wait_for_property_value_box + page.statementValueInputField = coordinate_values[0]["input"] + page.inputExtender_element.when_visible + page.inputExtender_element.visible?.should be_true + page.inputExtenderClose_element.click + page.inputExtender_element.when_not_visible + page.inputExtender_element.visible?.should be_false + page.statementValueInputField_element.click + page.inputExtender_element.when_visible + page.inputExtender_element.visible?.should be_true + page.inputPreviewValue_element.visible?.should be_true + page.coordinateInputExtenderAdvanced_element.visible?.should be_true + page.coordinateInputExtenderAdvanced + page.coordinatePrecision_element.when_visible + page.coordinatePrecision_element.visible?.should be_true + page.coordinatePrecisionRotatorSelect?.should be_true + page.coordinateInputExtenderAdvanced + page.coordinatePrecision_element.when_not_visible + page.coordinatePrecision_element.visible?.should be_false + page.coordinateInputExtenderAdvanced + page.coordinatePrecision_element.when_visible + page.coordinatePrecisionRotatorSelect + page.coordinatePrecisionMenu_element.when_visible + page.coordinatePrecisionMenu_element.visible?.should be_true + page.coordinatePrecisionRotatorSelect + page.coordinatePrecisionMenu_element.when_not_visible + page.coordinatePrecisionMenu_element.visible?.should be_false + end + end + + coordinate_values.each do |coordinate| + it "should check preview for '" + coordinate["input"] + "'/" + coordinate["precision"] do + on_page(ItemPage) do |page| + page.navigate_to_item + page.wait_for_entity_to_load + page.addStatement + page.entitySelectorInput = prop_label + ajax_wait + page.wait_for_entity_selector_list + page.wait_for_property_value_box + page.statementValueInputField_element.clear + page.statementValueInputField = coordinate["input"] + page.inputExtender_element.when_visible + page.select_coordinate_precision coordinate["precision"] + page.inputPreviewValue.should == coordinate["expected_preview"] + page.coordinatePrecisionRotatorSelect_element.text.should == coordinate["expected_precision"] + page.cancelStatement + end + end + end + + it "should check saving of coordinate" do + on_page(ItemPage) do |page| + page.navigate_to_item + page.wait_for_entity_to_load + page.addStatement + page.entitySelectorInput = prop_label + ajax_wait + page.wait_for_entity_selector_list + page.wait_for_property_value_box + page.statementValueInputField = coordinate_values[0]["input"] + page.saveStatement?.should be_true + page.saveStatement + ajax_wait + page.wait_for_statement_request_finished + page.statement1ClaimValue1Nolink.should == coordinate_values[0]["expected_preview"] + @browser.refresh + page.wait_for_entity_to_load + page.statement1ClaimValue1Nolink.should == coordinate_values[0]["expected_preview"] + end + end + end + + after :all do + # tear down + end + +end \ No newline at end of file diff --git a/repo/tests/selenium/statements/statements_time_spec.rb b/repo/tests/selenium/statements/statements_time_spec.rb index 2a12750..90d2990 100644 --- a/repo/tests/selenium/statements/statements_time_spec.rb +++ b/repo/tests/selenium/statements/statements_time_spec.rb @@ -142,15 +142,15 @@ page.wait_for_entity_selector_list page.wait_for_property_value_box page.statementValueInputField = time_values[0]["input"] - page.timeInputExtender_element.when_visible - page.timeInputExtender_element.visible?.should be_true - page.timeInputExtenderClose_element.click - page.timeInputExtender_element.when_not_visible - page.timeInputExtender_element.visible?.should be_false + page.inputExtender_element.when_visible + page.inputExtender_element.visible?.should be_true + page.inputExtenderClose_element.click + page.inputExtender_element.when_not_visible + page.inputExtender_element.visible?.should be_false page.statementValueInputField_element.click - page.timeInputExtender_element.when_visible - page.timeInputExtender_element.visible?.should be_true - page.timePreviewValue_element.visible?.should be_true + page.inputExtender_element.when_visible + page.inputExtender_element.visible?.should be_true + page.inputPreviewValue_element.visible?.should be_true page.timeInputExtenderAdvanced_element.visible?.should be_true page.timeInputExtenderAdvanced page.timePrecision_element.when_visible @@ -191,10 +191,10 @@ page.wait_for_property_value_box page.statementValueInputField_element.clear page.statementValueInputField = time["input"] - page.timeInputExtender_element.when_visible - page.select_precision time["precision"] + page.inputExtender_element.when_visible + page.select_time_precision time["precision"] page.select_calendar time["calendar"] - page.timePreviewValue.should == time["expected_preview"] + page.inputPreviewValue.should == time["expected_preview"] page.timePrecisionRotatorSelect_element.text.should == time["expected_precision"] if time["expected_calendarhint"] == "" page.timeCalendarHint_element.visible?.should be_false diff --git a/selenium/Rakefile b/selenium/Rakefile index 1198a24..552f667 100644 --- a/selenium/Rakefile +++ b/selenium/Rakefile @@ -220,12 +220,12 @@ RSpec::Core::RakeTask.new(:statements) do |spec| spec.ruby_opts = "-I lib:spec" - spec.pattern = '../repo/tests/selenium/statements/{statements_spec.rb,statements_cm_spec.rb,statements_item_spec.rb,statements_string_spec.rb,statements_time_spec.rb,references_spec.rb,qualifiers_spec.rb,statements_deleted_prop_spec.rb,statements_deleted_item_spec.rb}' + spec.pattern = '../repo/tests/selenium/statements/{statements_spec.rb,statements_cm_spec.rb,statements_item_spec.rb,statements_string_spec.rb,statements_time_spec.rb,statements_coordinate_spec.rb,references_spec.rb,qualifiers_spec.rb,statements_deleted_prop_spec.rb,statements_deleted_item_spec.rb}' end RSpec::Core::RakeTask.new(:statements_basic) do |spec| spec.ruby_opts = "-I lib:spec" - spec.pattern = '../repo/tests/selenium/statements/{statements_spec.rb,statements_cm_spec.rb,statements_item_spec.rb}' + spec.pattern = '../repo/tests/selenium/statements/{statements_spec.rb,statements_cm_spec.rb,statements_item_spec.rb,statements_time_spec.rb,statements_coordinate_spec.rb}' end RSpec::Core::RakeTask.new(:statements_cm) do |spec| @@ -248,6 +248,11 @@ spec.pattern = '../repo/tests/selenium/statements/statements_time_spec.rb' end +RSpec::Core::RakeTask.new(:statements_coordinate) do |spec| + spec.ruby_opts = "-I lib:spec" + spec.pattern = '../repo/tests/selenium/statements/statements_coordinate_spec.rb' +end + RSpec::Core::RakeTask.new(:statements_bugs) do |spec| spec.ruby_opts = "-I lib:spec" spec.pattern = '../repo/tests/selenium/statements/statements_bugs_spec.rb' diff --git a/selenium/lib/modules/coordinate_module.rb b/selenium/lib/modules/coordinate_module.rb new file mode 100644 index 0000000..fae2fe3 --- /dev/null +++ b/selenium/lib/modules/coordinate_module.rb @@ -0,0 +1,42 @@ +# -*- encoding : utf-8 -*- +# Wikidata UI tests +# +# Author:: Tobias Gritschacher ([email protected]) +# License:: GNU GPL v2+ +# +# module for coordinate page object + +module CoordinatePage + include PageObject + # coordinate UI elements + link(:coordinateInputExtenderAdvanced, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/a[contains(@class, 'valueview-expert-globecoordinateinput-advancedtoggler')]") + div(:coordinatePrecision, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precisioncontainer')]") + link(:coordinatePrecisionRotatorAuto, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 'ui-listrotator-auto')]") + link(:coordinatePrecisionRotatorPrev, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 'ui-listrotator-prev')]") + link(:coordinatePrecisionRotatorNext, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 'ui-listrotator-next')]") + link(:coordinatePrecisionRotatorSelect, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 'ui-listrotator-curr')]") + unordered_list(:coordinatePrecisionMenu, :class => "ui-listrotator-menu", :index => 0) + # methods + def select_coordinate_precision prec + self.show_advanced_coordinate_settings + if prec == "auto" + self.coordinatePrecisionRotatorAuto + return + end + self.coordinatePrecisionRotatorSelect + self.coordinatePrecisionMenu_element.when_visible + self.coordinatePrecisionMenu_element.each do |item| + if item.text == prec + item.click + return + end + end + end + + def show_advanced_coordinate_settings + if !self.coordinatePrecision_element.visible? + self.coordinateInputExtenderAdvanced + self.coordinatePrecision_element.when_visible + end + end +end diff --git a/selenium/lib/modules/input_extender_module.rb b/selenium/lib/modules/input_extender_module.rb new file mode 100644 index 0000000..96e4f55 --- /dev/null +++ b/selenium/lib/modules/input_extender_module.rb @@ -0,0 +1,24 @@ +# -*- encoding : utf-8 -*- +# Wikidata UI tests +# +# Author:: Tobias Gritschacher ([email protected]) +# License:: GNU GPL v2+ +# +# module for input extender page object + +module InputExtenderPage + include PageObject + # input extender UI elements + div(:inputExtender, :class => "ui-inputextender-extension") + div(:inputExtenderClose, :class => "ui-inputextender-extension-close") + div(:inputPreview, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-preview')]") + div(:inputPreviewLabel, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-preview')]/div[contains(@class, 'valueview-preview-label')]") + div(:inputPreviewValue, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-preview')]/div[contains(@class, 'valueview-preview-value')]") + #link(:coordinateInputExtenderAdvanced, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/a[contains(@class, 'valueview-expert-globecoordinateinput-advancedtoggler')]") + #div(:coordinatePrecision, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precisioncontainer')]") + #link(:coordinatePrecisionRotatorAuto, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 'ui-listrotator-auto')]") + #link(:coordinatePrecisionRotatorPrev, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 'ui-listrotator-prev')]") + #link(:coordinatePrecisionRotatorNext, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 'ui-listrotator-next')]") + #link(:coordinatePrecisionRotatorSelect, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class, 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 'ui-listrotator-curr')]") + #unordered_list(:coordinatePrecisionMenu, :class => "ui-listrotator-menu", :index => 0) +end diff --git a/selenium/lib/modules/time_module.rb b/selenium/lib/modules/time_module.rb index 3ffd10e..f7c3eda 100644 --- a/selenium/lib/modules/time_module.rb +++ b/selenium/lib/modules/time_module.rb @@ -9,11 +9,6 @@ module TimePage include PageObject # time UI elements - div(:timeInputExtender, :class => "ui-inputextender-extension") - div(:timeInputExtenderClose, :class => "ui-inputextender-extension-close") - div(:timePreview, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-preview')]") - div(:timePreviewLabel, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-preview')]/div[contains(@class, 'valueview-preview-label')]") - div(:timePreviewValue, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-preview')]/div[contains(@class, 'valueview-preview-value')]") div(:timeCalendarHint, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-timeinput-calendarhint')]") span(:timeCalendarHintMessage, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-timeinput-calendarhint')]/span[contains(@class, 'valueview-expert-timeinput-calendarhint-message')]") link(:timeCalendarHintSwitch, :xpath => "//div[contains(@class, 'ui-inputextender-extension')]/div[contains(@class, 'valueview-expert-timeinput-calendarhint')]/span[contains(@class, 'valueview-expert-timeinput-calendarhint-switch')]") @@ -31,7 +26,7 @@ unordered_list(:timePrecisionMenu, :class => "ui-listrotator-menu", :index => 0) unordered_list(:timeCalendarMenu, :class => "ui-listrotator-menu", :index => 1) # methods - def select_precision prec + def select_time_precision prec self.show_advanced_time_settings if prec == "auto" self.timePrecisionRotatorAuto diff --git a/selenium/lib/pages/entity_page.rb b/selenium/lib/pages/entity_page.rb index 86c36f2..54e1f75 100644 --- a/selenium/lib/pages/entity_page.rb +++ b/selenium/lib/pages/entity_page.rb @@ -13,7 +13,9 @@ include SitelinkPage include AliasPage include StatementPage + include InputExtenderPage include TimePage + include CoordinatePage include ULSPage @@property_url = "" @@ -73,6 +75,7 @@ end def wait_for_entity_to_load + sleep 1 wait_until do entitySpinner? == false end -- To view, visit https://gerrit.wikimedia.org/r/68349 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I895770f349afe8608d9eec044666e6c52905a2c8 Gerrit-PatchSet: 2 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Tobias Gritschacher <[email protected]> Gerrit-Reviewer: Henning Snater <[email protected]> Gerrit-Reviewer: jenkins-bot _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
