diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2020-08-30 20:07:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-30 20:07:13 +0200 |
commit | 5d4c4b54e62f1686d78bc3e71120ea5ef6921337 (patch) | |
tree | c377adbbb26632b8996df56ea6e5415ae666d46d | |
parent | 6a40e9685315df7949dca004c186de29f5a55045 (diff) | |
parent | 034b7bd4a903e5c3fca9851ea4f67af64ed474d2 (diff) | |
download | nextcloud-server-5d4c4b54e62f1686d78bc3e71120ea5ef6921337.tar.gz nextcloud-server-5d4c4b54e62f1686d78bc3e71120ea5ef6921337.zip |
Merge pull request #22481 from nextcloud/fix-clicks-on-actions-menu-of-non-opaque-file-rows-in-acceptance-tests
Fix clicks on actions menu of non opaque file rows in acceptance tests
-rw-r--r-- | tests/acceptance/features/bootstrap/FileListContext.php | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/tests/acceptance/features/bootstrap/FileListContext.php b/tests/acceptance/features/bootstrap/FileListContext.php index 72c5c012dd1..0b0c80bc272 100644 --- a/tests/acceptance/features/bootstrap/FileListContext.php +++ b/tests/acceptance/features/bootstrap/FileListContext.php @@ -387,7 +387,7 @@ class FileListContext implements Context, ActorAwareInterface { * @Given I open the details view for :fileName */ public function iOpenTheDetailsViewFor($fileName) { - $this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click(); + $this->openFileActionsMenuForFile($fileName); $this->actor->find(self::detailsMenuItem(), 2)->click(); } @@ -396,7 +396,7 @@ class FileListContext implements Context, ActorAwareInterface { * @Given I rename :fileName1 to :fileName2 */ public function iRenameTo($fileName1, $fileName2) { - $this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName1), 10)->click(); + $this->openFileActionsMenuForFile($fileName1); $this->actor->find(self::renameMenuItem(), 2)->click(); @@ -416,7 +416,7 @@ class FileListContext implements Context, ActorAwareInterface { * @Given I start the move or copy operation for :fileName */ public function iStartTheMoveOrCopyOperationFor($fileName) { - $this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click(); + $this->openFileActionsMenuForFile($fileName); $this->actor->find(self::moveOrCopyMenuItem(), 2)->click(); } @@ -427,7 +427,7 @@ class FileListContext implements Context, ActorAwareInterface { public function iMarkAsFavorite($fileName) { $this->iSeeThatIsNotMarkedAsFavorite($fileName); - $this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click(); + $this->openFileActionsMenuForFile($fileName); $this->actor->find(self::addToFavoritesMenuItem(), 2)->click(); } @@ -438,7 +438,7 @@ class FileListContext implements Context, ActorAwareInterface { public function iUnmarkAsFavorite($fileName) { $this->iSeeThatIsMarkedAsFavorite($fileName); - $this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click(); + $this->openFileActionsMenuForFile($fileName); $this->actor->find(self::removeFromFavoritesMenuItem(), 2)->click(); } @@ -447,7 +447,7 @@ class FileListContext implements Context, ActorAwareInterface { * @When I view :fileName in folder */ public function iViewInFolder($fileName) { - $this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click(); + $this->openFileActionsMenuForFile($fileName); $this->actor->find(self::viewFileInFolderMenuItem(), 2)->click(); } @@ -456,7 +456,7 @@ class FileListContext implements Context, ActorAwareInterface { * @When I delete :fileName */ public function iDelete($fileName) { - $this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click(); + $this->openFileActionsMenuForFile($fileName); $this->actor->find(self::deleteMenuItem(), 2)->click(); } @@ -552,4 +552,34 @@ class FileListContext implements Context, ActorAwareInterface { public function iSeeThatHasUnreadComments($fileName) { PHPUnit_Framework_Assert::assertTrue($this->actor->find(self::commentActionForFile($this->fileListAncestor, $fileName), 10)->isVisible()); } + + private function waitForRowForFileToBeFullyOpaque($fileName) { + $actor = $this->actor; + $fileRowXpathExpression = $this->actor->find(self::rowForFile($this->fileListAncestor, $fileName), 10)->getWrappedElement()->getXpath(); + + $fileRowIsFullyOpaqueCallback = function () use ($actor, $fileRowXpathExpression) { + $opacity = $actor->getSession()->evaluateScript("return window.getComputedStyle(document.evaluate(\"" . $fileRowXpathExpression . "\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue).opacity;"); + if ($opacity === "1") { + return true; + } + + return false; + }; + + if (!Utils::waitFor($fileRowIsFullyOpaqueCallback, $timeout = 2 * $this->actor->getFindTimeoutMultiplier(), $timeoutStep = 1)) { + PHPUnit_Framework_Assert::fail("The row for file $fileName in file list is not fully opaque after $timeout seconds"); + } + } + + private function openFileActionsMenuForFile($fileName) { + // When a row is added to the file list the opacity of the file row is + // animated from transparent to fully opaque. As the file actions menu + // is a descendant of the row but overflows it when the row is not fully + // opaque clicks on the menu entries "fall-through" and are received + // instead by the rows behind. Therefore it should be waited until the + // row of the file is fully opaque before using the menu. + $this->waitForRowForFileToBeFullyOpaque($fileName); + + $this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click(); + } } |