]> source.dussan.org Git - nextcloud-server.git/commitdiff
Move the browser window of an actor to the foreground when acting as him 12120/head
authorDaniel Calviño Sánchez <danxuliu@gmail.com>
Sun, 14 Oct 2018 18:56:50 +0000 (20:56 +0200)
committerDaniel Calviño Sánchez <danxuliu@gmail.com>
Mon, 29 Oct 2018 15:26:12 +0000 (16:26 +0100)
Each time a new actor appears in a scenario the browser window of the
new actor is put in front of the browser windows of the previous actors.
Before, when acting again as a previous actor his browser window stayed
in the background; in most cases everything worked fine even if the
window was in the background, but due to a bug in the Firefox driver of
Selenium and/or maybe in Firefox itself when the window was in the
background it was not possible to set the value of an input field that
had a range selected.

Now, when acting again as a previous actor his browser window is brought
to the foreground. This prevents the bug from manifesting, but also
reflects better how a user would interact with the browser in real life.

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

index 6a39d7a999f74abf3be7ff215a864fcf18c3cc79..5206e6417dedcbc14dd11227f6eec80f13a7f0d0 100644 (file)
@@ -295,6 +295,15 @@ class FileListContext implements Context, ActorAwareInterface {
 
                $this->actor->find(self::renameMenuItem(), 2)->click();
 
+               // For reference, due to a bug in the Firefox driver of Selenium and/or
+               // maybe in Firefox itself, as a range is selected in the rename input
+               // (the name of the file, without its extension) when the value is set
+               // the window must be in the foreground. Otherwise, if the window is in
+               // the background, instead of setting the value in the whole field it
+               // would be set only in the selected range.
+               // This should not be a problem, though, as the default behaviour is to
+               // bring the browser window to the foreground when switching to a
+               // different actor.
                $this->actor->find(self::renameInputForFile($this->fileListAncestor, $fileName1), 10)->setValue($fileName2 . "\r");
        }
 
index 2cdc4b01ff1514e873a3bab78b4f2eb50929ab94..81587e40682a4316ddd190fc8c57c06f4e8cf734 100644 (file)
@@ -164,6 +164,14 @@ class ActorContext extends RawMinkContext {
                }
 
                $this->currentActor = $this->actors[$actorName];
+
+               // Ensure that the browser window of the actor is the one in the
+               // foreground; this works around a bug in the Firefox driver of Selenium
+               // and/or maybe in Firefox itself when interacting with a window in the
+               // background, but also reflects better how the user would interact with
+               // the browser in real life.
+               $session = $this->actors[$actorName]->getSession();
+               $session->switchToWindow($session->getWindowName());
        }
 
        /**