minkphp / minkphp/Mink

Switching windows by name or handle?

Open
#868 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
PHP
Stars
1.6k
Forks
286
PR merge metrics
No merged PRs in 30d

Description

Technical limitations
Switching windows by a handle
  • the Selenium server provides a handle for the currently focused window
  • the Selenium server provides a handle for all opened windows without the need to focus each of them upfront
  • using a handle is supported for Selenium 2 and Selenium 3
  • providing an empty window name will switch to the first opened window in Selenium 2 only
Switching windows by a name
  • the Selenium server can only return the name for the currently focused window
  • there can be several windows with an empty (non-unique) name
  • no way to switch to the first opened window
Current implementation
  • the getWindowName method returns a handle
  • the getWindowNames method returns a handles array
  • the switchToWindow on Selenium 2 can switch windows by name/handle (see Technical limitations above)
  • the switchToWindow on Selenium 3 can switch windows by a handle only (see Technical limitations above)
Proposed implementation

See https://github.com/minkphp/MinkSelenium2Driver/pull/384 .

  • the getWindowName method returns a window name (if non-empty) or a handle
  • the getWindowNames method returns a window name (if non-empty) or a handle array
  • the switchToWindow can switch windows by a name/handle, but needs to iterate/focus over each window to determine the handle by its name

The downside of the proposed implementation

  1. All windows need to be iterated to retrieve their name, which:
  • can be slow when lots of windows are opened (these websites exist?);
  • when the website has a JavaScript code that closes a window upon focus loss, then iteration can be very bad.
  1. When the window is renamed after opening, then window name obtained by the getWindowName or getWindowNames would produce NoSuchWindow exception, when given to the switchToWindow method

Comments from contributors

In the https://github.com/minkphp/MinkSelenium2Driver/pull/384/files#r1501886088 @uuf6429 proposed to replace window name support with window handle support Mink-wise. Considering, that Selenium-based drivers are the only ones that support window operations now.

In the https://github.com/minkphp/MinkSelenium2Driver/pull/384/files#r1501840465 @mvorisek explained window handle workflow like this:

  1. user opens a window
  2. user store the handle
  3. user uses the handle to switch to that window

I personally like the proposed implementation, because:

  • it makes tests pass for Selenium 3 (it can't switch windows by a name);
  • the potential problems, described above, are really an edge cases, that might be as common.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the getWindowName, getWindowNames, and switchToWindow entry points discussed in MinkSelenium2Driver pull request #384. Compare the Selenium 2 and Selenium 3 window behavior described here, including the iteration and renamed-window edge cases. Done means the project has a settled, documented window name/handle behavior that works with the supported Selenium versions.

Written by the indexing model from the issue text.

Assessment

Tech stack
php
Domain
api, web-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.