MDL-50940 behat: Added support for field matching with xpath
authorrajesh Taneja <rajesh@moodle.com>
Wed, 23 Sep 2015 05:36:54 +0000 (13:36 +0800)
committerrajesh Taneja <rajesh@moodle.com>
Thu, 24 Sep 2015 05:00:15 +0000 (13:00 +0800)
admin/tool/behat/tests/behat/get_and_set_fields.feature
lib/tests/behat/behat_forms.php

index 40c1cbe..9f1d5c1 100644 (file)
@@ -137,6 +137,17 @@ Feature: Verify that all form fields values can be get and set
     And I press "Save my choice"
     And the field "one" matches value "1"
     And the field "two" matches value ""
+    # Check if field xpath set/match works.
+    And I am on site homepage
+    And I follow "Course 1"
+    And I navigate to "Edit settings" node in "Course administration"
+    And I set the field with xpath "//input[@id='id_idnumber']" to "Course id number"
+    And the field with xpath "//input[@name='idnumber']" matches value "Course id number"
+    And the field with xpath "//input[@name='idnumber']" does not match value ""
+    And I press "Save and display"
+    And I navigate to "Edit settings" node in "Course administration"
+    And the field "Course ID number" matches value "Course id number"
+
 
   Scenario: with JS disabled all form fields getters and setters works as expected
 
index f07ee3c..f36571d 100644 (file)
@@ -241,9 +241,34 @@ class behat_forms extends behat_base {
     }
 
     /**
-     * Checks, the field matches the value. More info in http://docs.moodle.org/dev/Acceptance_testing#Providing_values_to_steps.
+     * Checks, the field does not match the value. More info in http://docs.moodle.org/dev/Acceptance_testing#Providing_values_to_steps.
+     *
+     * @Then /^the field "(?P<field_string>(?:[^"]|\\")*)" does not match value "(?P<field_value_string>(?:[^"]|\\")*)"$/
+     * @throws ExpectationException
+     * @throws ElementNotFoundException Thrown by behat_base::find
+     * @param string $field
+     * @param string $value
+     * @return void
+     */
+    public function the_field_does_not_match_value($field, $value) {
+
+        // Get the field.
+        $formfield = behat_field_manager::get_form_field_from_label($field, $this);
+
+        // Checks if the provided value matches the current field value.
+        if ($formfield->matches($value)) {
+            throw new ExpectationException(
+                'The \'' . $field . '\' value matches \'' . $value . '\' and it should not match it' ,
+                $this->getSession()
+            );
+        }
+    }
+
+    /**
+     * Checks, the field matches the value.
      *
-     * @Then /^the field with xpath "(?P<fieldxpath_string>(?:[^"]|\\")*)" matches value "(?P<field_value_string>(?:[^"]|\\")*)"$/
+     * @Then /^the field with xpath "(?P<xpath_string>(?:[^"]|\\")*)" matches value "(?P<field_value_string>(?:[^"]|\\")*)"$/
+     * @throws ExpectationException
      * @throws ElementNotFoundException Thrown by behat_base::find
      * @param string $fieldxpath
      * @param string $value
@@ -266,25 +291,25 @@ class behat_forms extends behat_base {
     }
 
     /**
-     * Checks, the field does not match the value. More info in http://docs.moodle.org/dev/Acceptance_testing#Providing_values_to_steps.
+     * Checks, the field does not match the value.
      *
-     * @Then /^the field "(?P<field_string>(?:[^"]|\\")*)" does not match value "(?P<field_value_string>(?:[^"]|\\")*)"$/
+     * @Then /^the field with xpath "(?P<xpath_string>(?:[^"]|\\")*)" does not match value "(?P<field_value_string>(?:[^"]|\\")*)"$/
      * @throws ExpectationException
      * @throws ElementNotFoundException Thrown by behat_base::find
-     * @param string $field
+     * @param string $fieldxpath
      * @param string $value
      * @return void
      */
-    public function the_field_does_not_match_value($field, $value) {
+    public function the_field_with_xpath_does_not_match_value($fieldxpath, $value) {
 
         // Get the field.
-        $formfield = behat_field_manager::get_form_field_from_label($field, $this);
+        $fieldnode = $this->find('xpath', $fieldxpath);
+        $formfield = behat_field_manager::get_form_field($fieldnode, $this->getSession());
 
         // Checks if the provided value matches the current field value.
         if ($formfield->matches($value)) {
-            $fieldvalue = $formfield->get_value();
             throw new ExpectationException(
-                'The \'' . $field . '\' value matches \'' . $value . '\' and it should not match it' ,
+                'The \'' . $fieldxpath . '\' value matches \'' . $value . '\' and it should not match it' ,
                 $this->getSession()
             );
         }