Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix clicks on actions menu of non opaque file rows in acceptance tests #22481

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 37 additions & 7 deletions tests/acceptance/features/bootstrap/FileListContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ public function iStartTheMoveOrCopyOperationForTheSelectedFiles() {
* @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();
}
Expand All @@ -396,7 +396,7 @@ public function iOpenTheDetailsViewFor($fileName) {
* @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();

Expand All @@ -416,7 +416,7 @@ public function iRenameTo($fileName1, $fileName2) {
* @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();
}
Expand All @@ -427,7 +427,7 @@ public function iStartTheMoveOrCopyOperationFor($fileName) {
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();
}
Expand All @@ -438,7 +438,7 @@ public function iMarkAsFavorite($fileName) {
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();
}
Expand All @@ -447,7 +447,7 @@ public function iUnmarkAsFavorite($fileName) {
* @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();
}
Expand All @@ -456,7 +456,7 @@ public function iViewInFolder($fileName) {
* @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();
}
Expand Down Expand Up @@ -552,4 +552,34 @@ public function iSeeThatIsNotMarkedAsFavorite($fileName) {
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();
}
}