MDL-44991 Behat: step to check if attribute does not contain text
authorsam marshall <s.marshall@open.ac.uk>
Tue, 8 Apr 2014 09:57:13 +0000 (10:57 +0100)
committersam marshall <s.marshall@open.ac.uk>
Fri, 11 Apr 2014 10:00:25 +0000 (11:00 +0100)
The step checks that an attribute exists, but doesn't contain the
specified text.

Example:
Then the "class" attribute of "#mydiv" "css_element" should
not contain "accesshide"

lib/tests/behat/behat_general.php

index 0900afb..edf1e50 100644 (file)
@@ -928,4 +928,28 @@ class behat_general extends behat_base {
                     $this->getSession());
         }
     }
+
+    /**
+     * Checks that the attribute on the given element does not contain the specified text.
+     *
+     * @Then /^the "(?P<attribute_string>[^"]*)" attribute of "(?P<element_string>(?:[^"]|\\")*)" "(?P<selector_string>[^"]*)" should not contain "(?P<text_string>(?:[^"]|\\")*)"$/
+     * @throws ExpectationException
+     * @param string $attribute Name of attribute
+     * @param string $element The locator of the specified selector
+     * @param string $selectortype The selector type
+     * @param string $text Expected substring
+     */
+    public function the_attribute_of_should_not_contain($attribute, $element, $selectortype, $text) {
+        // Get the container node (exception if it doesn't exist).
+        $containernode = $this->get_selected_node($selectortype, $element);
+        $value = $containernode->getAttribute($attribute);
+        if ($value == null) {
+            throw new ExpectationException('The attribute "' . $attribute. '" does not exist',
+                    $this->getSession());
+        } else if (strpos($value, $text) !== false) {
+            throw new ExpectationException('The attribute "' . $attribute .
+                    '" contains "' . $text . '" (value: "' . $value . '")',
+                    $this->getSession());
+        }
+    }
 }