MDL-67668 behat: Support NodeElement when fetching node in container
authorAndrew Nicols <andrew@nicols.co.uk>
Thu, 12 Nov 2020 00:15:55 +0000 (08:15 +0800)
committerAndrew Nicols <andrew@nicols.co.uk>
Mon, 23 Nov 2020 01:01:19 +0000 (09:01 +0800)
This is similar to change made in MDL-69136 to allow an already-fetched
NodeElement to be provided to the get_node_in_container() function and
makes it easier to be deterministic when writing steps.

lib/behat/behat_base.php

index 57688c8..5298e50 100644 (file)
@@ -467,10 +467,16 @@ class behat_base extends Behat\MinkExtension\Context\RawMinkContext {
      * @return NodeElement
      */
     protected function get_node_in_container($selectortype, $element, $containerselectortype, $containerelement) {
-        // Gets the container, it will always be text based.
-        $containernode = $this->get_text_selector_node($containerselectortype, $containerelement);
+        if ($containerselectortype === 'NodeElement' && is_a($containerelement, NodeElement::class)) {
+            // Support a NodeElement being passed in for use in step chaining.
+            $containernode = $containerelement;
+            $locatorexceptionmsg = $element;
+        } else {
+            // Gets the container, it will always be text based.
+            $containernode = $this->get_text_selector_node($containerselectortype, $containerelement);
+            $locatorexceptionmsg = $element . '" in the "' . $containerelement. '" "' . $containerselectortype. '"';
+        }
 
-        $locatorexceptionmsg = $element . '" in the "' . $containerelement. '" "' . $containerselectortype. '"';
         $exception = new ElementNotFoundException($this->getSession(), $selectortype, null, $locatorexceptionmsg);
 
         return $this->find($selectortype, $element, $exception, $containernode);