Skip to content

Commit 5d4c4b5

Browse files
authored
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
2 parents 6a40e96 + 034b7bd commit 5d4c4b5

1 file changed

Lines changed: 37 additions & 7 deletions

File tree

tests/acceptance/features/bootstrap/FileListContext.php

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ public function iStartTheMoveOrCopyOperationForTheSelectedFiles() {
387387
* @Given I open the details view for :fileName
388388
*/
389389
public function iOpenTheDetailsViewFor($fileName) {
390-
$this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click();
390+
$this->openFileActionsMenuForFile($fileName);
391391

392392
$this->actor->find(self::detailsMenuItem(), 2)->click();
393393
}
@@ -396,7 +396,7 @@ public function iOpenTheDetailsViewFor($fileName) {
396396
* @Given I rename :fileName1 to :fileName2
397397
*/
398398
public function iRenameTo($fileName1, $fileName2) {
399-
$this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName1), 10)->click();
399+
$this->openFileActionsMenuForFile($fileName1);
400400

401401
$this->actor->find(self::renameMenuItem(), 2)->click();
402402

@@ -416,7 +416,7 @@ public function iRenameTo($fileName1, $fileName2) {
416416
* @Given I start the move or copy operation for :fileName
417417
*/
418418
public function iStartTheMoveOrCopyOperationFor($fileName) {
419-
$this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click();
419+
$this->openFileActionsMenuForFile($fileName);
420420

421421
$this->actor->find(self::moveOrCopyMenuItem(), 2)->click();
422422
}
@@ -427,7 +427,7 @@ public function iStartTheMoveOrCopyOperationFor($fileName) {
427427
public function iMarkAsFavorite($fileName) {
428428
$this->iSeeThatIsNotMarkedAsFavorite($fileName);
429429

430-
$this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click();
430+
$this->openFileActionsMenuForFile($fileName);
431431

432432
$this->actor->find(self::addToFavoritesMenuItem(), 2)->click();
433433
}
@@ -438,7 +438,7 @@ public function iMarkAsFavorite($fileName) {
438438
public function iUnmarkAsFavorite($fileName) {
439439
$this->iSeeThatIsMarkedAsFavorite($fileName);
440440

441-
$this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click();
441+
$this->openFileActionsMenuForFile($fileName);
442442

443443
$this->actor->find(self::removeFromFavoritesMenuItem(), 2)->click();
444444
}
@@ -447,7 +447,7 @@ public function iUnmarkAsFavorite($fileName) {
447447
* @When I view :fileName in folder
448448
*/
449449
public function iViewInFolder($fileName) {
450-
$this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click();
450+
$this->openFileActionsMenuForFile($fileName);
451451

452452
$this->actor->find(self::viewFileInFolderMenuItem(), 2)->click();
453453
}
@@ -456,7 +456,7 @@ public function iViewInFolder($fileName) {
456456
* @When I delete :fileName
457457
*/
458458
public function iDelete($fileName) {
459-
$this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click();
459+
$this->openFileActionsMenuForFile($fileName);
460460

461461
$this->actor->find(self::deleteMenuItem(), 2)->click();
462462
}
@@ -552,4 +552,34 @@ public function iSeeThatIsNotMarkedAsFavorite($fileName) {
552552
public function iSeeThatHasUnreadComments($fileName) {
553553
PHPUnit_Framework_Assert::assertTrue($this->actor->find(self::commentActionForFile($this->fileListAncestor, $fileName), 10)->isVisible());
554554
}
555+
556+
private function waitForRowForFileToBeFullyOpaque($fileName) {
557+
$actor = $this->actor;
558+
$fileRowXpathExpression = $this->actor->find(self::rowForFile($this->fileListAncestor, $fileName), 10)->getWrappedElement()->getXpath();
559+
560+
$fileRowIsFullyOpaqueCallback = function () use ($actor, $fileRowXpathExpression) {
561+
$opacity = $actor->getSession()->evaluateScript("return window.getComputedStyle(document.evaluate(\"" . $fileRowXpathExpression . "\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue).opacity;");
562+
if ($opacity === "1") {
563+
return true;
564+
}
565+
566+
return false;
567+
};
568+
569+
if (!Utils::waitFor($fileRowIsFullyOpaqueCallback, $timeout = 2 * $this->actor->getFindTimeoutMultiplier(), $timeoutStep = 1)) {
570+
PHPUnit_Framework_Assert::fail("The row for file $fileName in file list is not fully opaque after $timeout seconds");
571+
}
572+
}
573+
574+
private function openFileActionsMenuForFile($fileName) {
575+
// When a row is added to the file list the opacity of the file row is
576+
// animated from transparent to fully opaque. As the file actions menu
577+
// is a descendant of the row but overflows it when the row is not fully
578+
// opaque clicks on the menu entries "fall-through" and are received
579+
// instead by the rows behind. Therefore it should be waited until the
580+
// row of the file is fully opaque before using the menu.
581+
$this->waitForRowForFileToBeFullyOpaque($fileName);
582+
583+
$this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click();
584+
}
555585
}

0 commit comments

Comments
 (0)