]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix exponential increase of timeout when finding ancestor elements
authorDaniel Calviño Sánchez <danxuliu@gmail.com>
Wed, 3 May 2017 10:34:04 +0000 (12:34 +0200)
committerDaniel Calviño Sánchez <danxuliu@gmail.com>
Wed, 3 May 2017 10:34:04 +0000 (12:34 +0200)
The timeout passed to the "find" method was multiplied by the
"findTimeoutMultiplier" attribute. However, as "find" used
"findAncestor" and "findAncestor", in turn, used "find" itself the
timeout was increased exponentially for ancestor elements. Now "find"
was split in "find" and "findInternal"; the first method is the public
one and modifies the given parameters as needed and then calls the
second method, private, that performs the find itself.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
tests/acceptance/features/core/Actor.php

index 0c23b5f7a400b377e4b3efe930cce8c16d75adb6..3a57b7e6054305de7a9bedf26c198cac1190a605 100644 (file)
@@ -165,6 +165,18 @@ class Actor {
        public function find($elementLocator, $timeout = 0, $timeoutStep = 0.5) {
                $timeout = $timeout * $this->findTimeoutMultiplier;
 
+               return $this->findInternal($elementLocator, $timeout, $timeoutStep);
+       }
+
+       /**
+        * Finds an element in the Mink Session of this Actor.
+        *
+        * The timeout is not affected by the multiplier set using
+        * setFindTimeoutMultiplier().
+        *
+        * @see find($elementLocator, $timeout, $timeoutStep)
+        */
+       private function findInternal($elementLocator, $timeout, $timeoutStep) {
                $element = null;
                $selector = $elementLocator->getSelector();
                $locator = $elementLocator->getLocator();
@@ -211,7 +223,7 @@ class Actor {
                $ancestorElement = $elementLocator->getAncestor();
                if ($ancestorElement instanceof Locator) {
                        try {
-                               $ancestorElement = $this->find($ancestorElement, $timeout, $timeoutStep);
+                               $ancestorElement = $this->findInternal($ancestorElement, $timeout, $timeoutStep);
                        } catch (NoSuchElementException $exception) {
                                // Little hack to show the stack of ancestor elements that could
                                // not be found, as Behat only shows the message of the last