Tobias Gritschacher has submitted this change and it was merged.

Change subject: Basic cucumber tests for statements
......................................................................


Basic cucumber tests for statements

- baseline commit for cucumber statement tests

Bug: 53845
Change-Id: Ie5c47a735b864b0bd28bed37610c09b60ea85ba4
---
A selenium_cuc/features/statement.feature
A selenium_cuc/features/step_definitions/entity_selector_steps.rb
A selenium_cuc/features/step_definitions/statement_steps.rb
M selenium_cuc/features/support/modules/entity_selector_module.rb
M selenium_cuc/features/support/modules/qualifiers_module.rb
M selenium_cuc/features/support/modules/statement_module.rb
6 files changed, 212 insertions(+), 45 deletions(-)

Approvals:
  Tobias Gritschacher: Verified; Looks good to me, approved



diff --git a/selenium_cuc/features/statement.feature 
b/selenium_cuc/features/statement.feature
new file mode 100644
index 0000000..41a835b
--- /dev/null
+++ b/selenium_cuc/features/statement.feature
@@ -0,0 +1,47 @@
+# Wikidata UI tests
+#
+# Author:: Tobias Gritschacher (tobias.gritschac...@wikimedia.de)
+# License:: GNU GPL v2+
+#
+# feature definition for statements tests
+
+@wikidata.beta.wmflabs.org
+Feature: Creating statements
+
+  Background:
+    Given I am on an item page
+      And The copyright warning has been dismissed
+      And Anonymous edit warnings are disabled
+
+  @ui_only
+  Scenario: Statement UI has all required elements
+    Then Statement add button should be there
+      And Statement cancel button should not be there
+      And Statement save button should not be there
+      And Entity selector input element should not be there
+      And Statement value input element should not be there
+
+  @ui_only
+  Scenario: Click the add button
+    When I click the statement add button
+    Then Statement add button should be disabled
+      And Statement cancel button should be there
+      And Statement save button should be disabled
+      And Statement help field should be there
+      And Entity selector input element should be there
+      And Statement value input element should not be there
+
+  @ui_only
+  Scenario Outline: Cancel statement
+    When I click the statement add button
+      And I <cancel>
+    Then Statement add button should be there
+      And Statement cancel button should not be there
+      And Statement save button should not be there
+      And Entity selector input element should not be there
+      And Statement value input element should not be there
+
+  Examples:
+    | cancel |
+    | click the statement cancel button |
+    | press the ESC key in the entity selector input field |
diff --git a/selenium_cuc/features/step_definitions/entity_selector_steps.rb 
b/selenium_cuc/features/step_definitions/entity_selector_steps.rb
new file mode 100644
index 0000000..4c70583
--- /dev/null
+++ b/selenium_cuc/features/step_definitions/entity_selector_steps.rb
@@ -0,0 +1,19 @@
+# -*- encoding : utf-8 -*-
+# Wikidata UI tests
+#
+# Author:: Tobias Gritschacher (tobias.gritschac...@wikimedia.de)
+# License:: GNU GPL v2+
+#
+# tests for entity selector
+
+When /^I press the ESC key in the entity selector input field$/ do
+  on(ItemPage).entitySelectorInput_element.send_keys :escape
+end
+
+Then /^Entity selector input element should be there$/ do
+  on(ItemPage).entitySelectorInput?.should be_true
+end
+
+Then /^Entity selector input element should not be there$/ do
+  on(ItemPage).entitySelectorInput?.should be_false
+end
diff --git a/selenium_cuc/features/step_definitions/statement_steps.rb 
b/selenium_cuc/features/step_definitions/statement_steps.rb
new file mode 100644
index 0000000..51b7429
--- /dev/null
+++ b/selenium_cuc/features/step_definitions/statement_steps.rb
@@ -0,0 +1,61 @@
+# -*- encoding : utf-8 -*-
+# Wikidata UI tests
+#
+# Author:: Tobias Gritschacher (tobias.gritschac...@wikimedia.de)
+# License:: GNU GPL v2+
+#
+# tests for statements
+
+When /^I click the statement add button$/ do
+  on(ItemPage).addStatement
+end
+
+When /^I click the statement cancel button$/ do
+  on(ItemPage).cancelStatement
+end
+
+Then /^Statement help field should be there$/ do
+  on(ItemPage).statementHelpField?.should be_true
+end
+
+Then /^Statement add button should be there$/ do
+  on(ItemPage).addStatement?.should be_true
+end
+
+Then /^Statement add button should be disabled$/ do
+  on(ItemPage) do |page|
+    page.addStatement?.should be_false
+    page.addStatementDisabled?.should be_true
+  end
+end
+
+Then /^Statement save button should be there$/ do
+  on(ItemPage).saveStatement?.should be_true
+end
+
+Then /^Statement save button should not be there$/ do
+  on(ItemPage).saveStatement?.should be_false
+end
+
+Then /^Statement save button should be disabled$/ do
+  on(ItemPage) do |page|
+    page.saveStatement?.should be_false
+    page.saveStatementDisabled?.should be_true
+  end
+end
+
+Then /^Statement cancel button should be there$/ do
+  on(ItemPage).cancelStatement?.should be_true
+end
+
+Then /^Statement cancel button should not be there$/ do
+  on(ItemPage).cancelStatement?.should be_false
+end
+
+Then /^Statement value input element should be there$/ do
+  on(ItemPage).statementValueInput?.should be_true
+end
+
+Then /^Statement value input element should not be there$/ do
+  on(ItemPage).statementValueInput?.should be_false
+end
diff --git a/selenium_cuc/features/support/modules/entity_selector_module.rb 
b/selenium_cuc/features/support/modules/entity_selector_module.rb
index d88813a..6e19727 100644
--- a/selenium_cuc/features/support/modules/entity_selector_module.rb
+++ b/selenium_cuc/features/support/modules/entity_selector_module.rb
@@ -16,17 +16,45 @@
   text_field(:entitySelectorInput, xpath: "//div[contains(@class, 
'wb-claimlistview')]//input[contains(@class, 'ui-entityselector-input')]", 
index: 0)
   text_field(:entitySelectorInput2, xpath: "//div[contains(@class, 
'wb-claimlistview')]//input[contains(@class, 'ui-entityselector-input')]", 
index: 1)
 
+  #ul(:entitySelectorList, class: "ui-entityselector-list")
+  #a(:firstEntitySelectorLink, xpath: "//ul[contains(@class, 
'ui-entityselector-list')]/li/a")
+  #span(:firstEntitySelectorLabel, xpath: "//ul[contains(@class, 
'ui-entityselector-list')]/li/a/span/span[contains(@class, 
'ui-entityselector-label')]")
+  #span(:firstEntitySelectorDescription, xpath: "//ul[contains(@class, 
'ui-entityselector-list')]/li/a/span/span[contains(@class, 
'ui-entityselector-description')]")
+  #text_field(:entitySelectorInput2, xpath: "//div[contains(@class, 
'wb-claimlistview')]//input[contains(@class, 'ui-entityselector-input')]", 
index: 1)
+  #text_field(:entitySelectorSearchInput, id: "searchInput")
+  #ul(:entitySelectorSearch, xpath: "//body/ul[contains(@class, 
'ui-entityselector-list')]")
+
+=begin
   def wait_for_entity_selector_list
     wait_until do
       entitySelectorList?
     end
   end
-end
 
-def select_entity(label)
-  self.entitySelectorInput = label
-  ajax_wait
-  self.wait_for_entity_selector_list
-  firstEntitySelectorLink
-  ajax_wait
+  def wait_for_suggestions_list
+    wait_until do
+      entitySelectorSearch?
+    end
+  end
+
+  def select_entity(label)
+    self.entitySelectorInput = label
+    ajax_wait
+    self.wait_for_entity_selector_list
+    firstEntitySelectorLink
+    ajax_wait
+  end
+
+  def count_search_results
+    entitySelectorSearch_element.items
+  end
+
+  def get_search_results
+    results = []
+    entitySelectorSearch_element.each do |li|
+      results << li
+    end
+    results
+  end
+=end
 end
diff --git a/selenium_cuc/features/support/modules/qualifiers_module.rb 
b/selenium_cuc/features/support/modules/qualifiers_module.rb
index c811bf1..32f3395 100644
--- a/selenium_cuc/features/support/modules/qualifiers_module.rb
+++ b/selenium_cuc/features/support/modules/qualifiers_module.rb
@@ -6,7 +6,7 @@
 #
 # module for qualifiers page object
 
-module ReferencePage
+module QualifierPage
   include PageObject
   # qualifiers UI elements
   div(:qualifiersContainer, class: "wb-claim-qualifiers")
diff --git a/selenium_cuc/features/support/modules/statement_module.rb 
b/selenium_cuc/features/support/modules/statement_module.rb
index 1a9228c..7f73d9c 100644
--- a/selenium_cuc/features/support/modules/statement_module.rb
+++ b/selenium_cuc/features/support/modules/statement_module.rb
@@ -9,36 +9,45 @@
 module StatementPage
   include PageObject
   include EntitySelectorPage
-  include ReferencePage
-  # statements UI elements
-  a(:addStatement, xpath: "//div[contains(@class, 
'wb-claimlistview')]/span[contains(@class, 'wb-addtoolbar')]/div/span/span/a")
-  a(:addClaimToFirstStatement, xpath: "//div[contains(@class, 
'wb-claim-section')][1]/span[contains(@class, 
'wb-addtoolbar')]/div/span/span/a")
-  a(:editFirstStatement, xpath: "//span[contains(@class, 
'wb-edittoolbar')]/span/span/span[contains(@class, 
'wb-ui-toolbar-editgroup-innoneditmode')]/span/a")
-  a(:saveStatement, xpath: "//span[contains(@class, 
'wb-edittoolbar')]/span/span/span[contains(@class, 
'wb-ui-toolbar-editgroup-ineditmode')]/span/a[text()='save']")
-  a(:cancelStatement, xpath: "//span[contains(@class, 
'wb-edittoolbar')]/span/span/span[contains(@class, 
'wb-ui-toolbar-editgroup-ineditmode')]/span/a[text()='cancel']")
-  a(:removeClaimButton, xpath: "//span[contains(@class, 
'wb-edittoolbar')]/span/span/span[contains(@class, 
'wb-ui-toolbar-editgroup-ineditmode')]/span/a[text()='remove']")
-  # TODO: could this lead to problems? for CM & item type properties there is 
an additional "a" element around the textbox; this is not the case for string 
type properies
-  #textarea(:statementValueInput, xpath: "//div[contains(@class, 
'valueview-ineditmode')]/div/a/textarea[contains(@class, 'valueview-input')]")
-  textarea(:statementValueInput, class: "valueview-input")
-  div(:claimEditMode, xpath: "//div[contains(@class, 
'wb-claim-section')]/div[contains(@class, 'wb-edit')]")
-  div(:statement1Name, xpath: "//div[contains(@class, 
'wb-claim-section')][1]/div[contains(@class, 
'wb-claim-section-name')]/div[contains(@class, 'wb-claim-name')]")
-  div(:statement2Name, xpath: "//div[contains(@class, 
'wb-claim-section')][2]/div[contains(@class, 
'wb-claim-section-name')]/div[contains(@class, 'wb-claim-name')]")
-  a(:statement1Link, xpath: "//div[contains(@class, 
'wb-claim-section')][1]/div[contains(@class, 
'wb-claim-section-name')]/div[contains(@class, 'wb-claim-name')]/a")
-  a(:statement2Link, xpath: "//div[contains(@class, 
'wb-claim-section')][2]/div[contains(@class, 
'wb-claim-section-name')]/div[contains(@class, 'wb-claim-name')]/a")
-  element(:statement1ClaimValue1, :a, xpath: "//div[contains(@class, 
'wb-claim-section')][1]/div[contains(@class, 
'wb-claimview')][1]/div/div/div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
-  element(:statement1ClaimValue2, :a, xpath: "//div[contains(@class, 
'wb-claim-section')][1]/div[contains(@class, 
'wb-claimview')][2]/div/div/div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
-  element(:statement1ClaimValue3, :a, xpath: "//div[contains(@class, 
'wb-claim-section')][1]/div[contains(@class, 
'wb-claimview')][3]/div/div/div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
-  element(:statement2ClaimValue1, :a, xpath: "//div[contains(@class, 
'wb-claim-section')][2]/div[contains(@class, 
'wb-claimview')][1]/div/div/div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
-  element(:statement2ClaimValue2, :a, xpath: "//div[contains(@class, 
'wb-claim-section')][2]/div[contains(@class, 
'wb-claimview')][2]/div/div/div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
-  element(:statement2ClaimValue3, :a, xpath: "//div[contains(@class, 
'wb-claim-section')][2]/div[contains(@class, 
'wb-claimview')][3]/div/div/div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
-  span(:snaktypeSelectorIcon, xpath: "//div[contains(@class, 
'wb-snak-typeselector')]/span[contains(@class, 'wb-snaktypeselector')]")
-  a(:snaktypeSelectorValue, xpath: "//ul[contains(@class, 
'wb-snaktypeselector-menu')]/li[contains(@class, 
'wb-snaktypeselector-menuitem-value')]/a")
-  a(:snaktypeSelectorSomevalue, xpath: "//ul[contains(@class, 
'wb-snaktypeselector-menu')]/li[contains(@class, 
'wb-snaktypeselector-menuitem-somevalue')]/a")
-  a(:snaktypeSelectorNovalue, xpath: "//ul[contains(@class, 
'wb-snaktypeselector-menu')]/li[contains(@class, 
'wb-snaktypeselector-menuitem-novalue')]/a")
+  #include ReferencePage
+  #include QualifierPage
 
+  # statements UI elements
+  a(:addStatement, css: "div.wb-claimlistview 
a.wb-addtoolbar-addbutton:not(.wikibase-toolbarbutton-disabled)")
+  a(:addStatementDisabled, css: "div.wb-claimlistview 
a.wb-addtoolbar-addbutton.wikibase-toolbarbutton-disabled")
+  a(:saveStatement, css: ".wb-claimlistview div.listview-item.wb-new 
a.wikibase-toolbareditgroup-savebutton:not(.wikibase-toolbarbutton-disabled)")
+  a(:saveStatementDisabled, css: ".wb-claimlistview div.listview-item.wb-new 
a.wikibase-toolbareditgroup-savebutton.wikibase-toolbarbutton-disabled")
+  a(:cancelStatement, css: ".wb-claimlistview div.listview-item.wb-new 
a.wikibase-toolbareditgroup-cancelbutton:not(.wikibase-toolbarbutton-disabled)")
+  a(:cancelStatementDisabled, css: ".wb-claimlistview div.listview-item.wb-new 
a.wikibase-toolbareditgroup-cancelbutton.wikibase-toolbarbutton-disabled")
+  textarea(:statementValueInput, xpath: "//div[contains(@class, 
'wb-claimlistview')]//input[contains(@class, 'valueview-input')]")
+  span(:statementHelpField, :css => "div.wb-claimlistview 
span.mw-help-field-hint")
+
+  #a(:addClaimToFirstStatement, css: "div.wb-claimlistview:nth-child(1) > 
span.wb-addtoolbar a:not(.wikibase-toolbarbutton-disabled)")
+  #a(:editFirstStatement, css: "span.wb-edittoolbar > span > span > 
span.wikibase-toolbareditgroup-innoneditmode > span > 
a:not(.wikibase-toolbarbutton-disabled):nth-child(1)")
+  #a(:removeClaimButton,       xpath: "//span[contains(@class, 
'wb-edittoolbar')]/span/span/span[contains(@class, 
'wikibase-toolbareditgroup-ineditmode')]/span/a[not(contains(@class, 
'wikibase-toolbarbutton-disabled'))][text()='remove']")
+  #text_field(:statementValueInputField, class: "valueview-input")
+  #div(:claimEditMode, xpath: "//div[contains(@class, 
'wb-claim-section')]/div[contains(@class, 'wb-edit')]")
+  #div(:statement1Name, xpath: "//div[contains(@class, 
'wb-claimlistview')][1]//div[contains(@class, 'wb-claim-name')]")
+  #div(:statement2Name, xpath: "//div[contains(@class, 
'wb-claimlistview')][2]//div[contains(@class, 'wb-claim-name')]")
+  #a(:statement1Link, xpath: "//div[contains(@class, 
'wb-claimlistview')][1]//div[contains(@class, 'wb-claim-name')]/a")
+  #a(:statement2Link, xpath: "//div[contains(@class, 
'wb-claimlistview')][2]//div[contains(@class, 'wb-claim-name')]/a")
+  #element(:statement1ClaimValue1, :a, xpath: "//div[contains(@class, 
'wb-claimlistview')][1]//div[contains(@class, 
'wb-claimview')][1]//div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
+  #element(:statement1ClaimValue2, :a, xpath: "//div[contains(@class, 
'wb-claimlistview')][1]//div[contains(@class, 
'wb-claimview')][2]//div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
+  #element(:statement1ClaimValue3, :a, xpath: "//div[contains(@class, 
'wb-claimlistview')][1]//div[contains(@class, 
'wb-claimview')][3]//div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
+  #element(:statement2ClaimValue1, :a, xpath: "//div[contains(@class, 
'wb-claimlistview')][2]//div[contains(@class, 
'wb-claimview')][1]//div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
+  #element(:statement2ClaimValue2, :a, xpath: "//div[contains(@class, 
'wb-claimlistview')][2]//div[contains(@class, 
'wb-claimview')][2]//div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
+  #element(:statement2ClaimValue3, :a, xpath: "//div[contains(@class, 
'wb-claimlistview')][2]//div[contains(@class, 
'wb-claimview')][3]//div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 'wb-snak-value')]/div/div/a")
+  #span(:statement1ClaimValue1Nolink, xpath: "//div[contains(@class, 
'wb-claimlistview')][1]//div[contains(@class, 
'wb-claimview')][1]//div[contains(@class, 
'wb-claim-mainsnak')]/div[contains(@class, 
'wb-snak-value-container')]/div[contains(@class, 
'wb-snak-value')]/div/div/span")
+  #span(:snaktypeSelectorIcon, xpath: "//div[contains(@class, 
'wb-snak-typeselector')]/span[contains(@class, 'wb-snaktypeselector')]")
+  #a(:snaktypeSelectorValue, xpath: "//ul[contains(@class, 
'wb-snaktypeselector-menu')]/li[contains(@class, 
'wb-snaktypeselector-menuitem-value')]/a")
+  #a(:snaktypeSelectorSomevalue, xpath: "//ul[contains(@class, 
'wb-snaktypeselector-menu')]/li[contains(@class, 
'wb-snaktypeselector-menuitem-somevalue')]/a")
+  #a(:snaktypeSelectorNovalue, xpath: "//ul[contains(@class, 
'wb-snaktypeselector-menu')]/li[contains(@class, 
'wb-snaktypeselector-menuitem-novalue')]/a")
+  #span(:previewSpinner, class: "mw-small-spinner")
+
+=begin
   def wait_for_property_value_box
     wait_until do
-      self.statementValueInput?
+      self.statementValueInput? || self.statementValueInputField?
     end
   end
 
@@ -56,7 +65,9 @@
     self.wait_for_property_value_box
     if self.statementValueInput?
       self.statementValueInput = statement_value
-      # TODO: bug 43609: Regarding item property, as long as no verification 
of the input is done, we have to wait for the entityselector to finish the 
selection
+      ajax_wait
+    elsif self.statementValueInputField?
+      self.statementValueInputField = statement_value
       ajax_wait
     end
     saveStatement
@@ -65,15 +76,15 @@
   end
 
   def edit_first_statement(statement_value)
-      editFirstStatement
-      self.wait_for_property_value_box
-      self.statementValueInput_element.clear
-      self.statementValueInput = statement_value
-      ajax_wait
-      saveStatement
-      ajax_wait
-      self.wait_for_statement_request_finished
-    end
+    editFirstStatement
+    self.wait_for_property_value_box
+    self.statementValueInput_element.clear
+    self.statementValueInput = statement_value
+    ajax_wait
+    saveStatement
+    ajax_wait
+    self.wait_for_statement_request_finished
+  end
 
   def add_claim_to_first_statement(statement_value)
     addClaimToFirstStatement
@@ -103,4 +114,5 @@
       self.snaktypeSelectorNovalue
     end
   end
+=end
 end

-- 
To view, visit https://gerrit.wikimedia.org/r/94915
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie5c47a735b864b0bd28bed37610c09b60ea85ba4
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Tobias Gritschacher <tobias.gritschac...@wikimedia.de>
Gerrit-Reviewer: Henning Snater <henning.sna...@wikimedia.de>
Gerrit-Reviewer: Tobias Gritschacher <tobias.gritschac...@wikimedia.de>
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

Reply via email to