]> source.dussan.org Git - nextcloud-server.git/commitdiff
Wait for the shared link to be set in the acceptance tests
authorDaniel Calviño Sánchez <danxuliu@gmail.com>
Fri, 22 Dec 2017 07:58:19 +0000 (08:58 +0100)
committerMorris Jobke <hey@morrisjobke.de>
Tue, 9 Jan 2018 14:57:27 +0000 (15:57 +0100)
When clicking on "Share link" in the "Sharing" tab of the Files app an
input field with the link appears. That input field already exists in
the DOM, although empty, before clicking on "Share link", and when that
is done the proper value is set and then the input field is shown.

In the acceptance tests "getValue()" can return the value of hidden
elements too, so as long as an element exists its value is returned
without waiting for the field to be visible. Due to this if the test
code runs too fast the "I write down the shared link" step could be
executed before the proper value was set, so the shared link got in that
case would be an empty value, and this would lead to failures when the
following steps were executed.

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

index ea12370697039a74123354be56f2a962490aaea2..d0acc6ad89a9d94bb0210cfbc9e7c32899593cce 100644 (file)
@@ -346,7 +346,16 @@ class FilesAppContext implements Context, ActorAwareInterface {
         * @Given I write down the shared link
         */
        public function iWriteDownTheSharedLink() {
-               $this->actor->getSharedNotebook()["shared link"] = $this->actor->find(self::shareLinkField(), 10)->getValue();
+               // The shared link field always exists in the DOM (once the "Sharing"
+               // tab is loaded), but its value is the actual shared link only when it
+               // is visible.
+               if (!$this->waitForElementToBeEventuallyShown(
+                               self::shareLinkField(),
+                               $timeout = 10 * $this->actor->getFindTimeoutMultiplier())) {
+                       PHPUnit_Framework_Assert::fail("The shared link was not shown yet after $timeout seconds");
+               }
+
+               $this->actor->getSharedNotebook()["shared link"] = $this->actor->find(self::shareLinkField())->getValue();
        }
 
        /**
@@ -517,6 +526,20 @@ class FilesAppContext implements Context, ActorAwareInterface {
                $this->iSeeThatTheWorkingIconForPasswordProtectIsEventuallyNotShown();
        }
 
+       private function waitForElementToBeEventuallyShown($elementLocator, $timeout = 10, $timeoutStep = 1) {
+               $actor = $this->actor;
+
+               $elementShownCallback = function() use ($actor, $elementLocator) {
+                       try {
+                               return $actor->find($elementLocator)->isVisible();
+                       } catch (NoSuchElementException $exception) {
+                               return false;
+                       }
+               };
+
+               return Utils::waitFor($elementShownCallback, $timeout, $timeoutStep);
+       }
+
        private function waitForElementToBeEventuallyNotShown($elementLocator, $timeout = 10, $timeoutStep = 1) {
                $actor = $this->actor;