robotframework / robotframework/SeleniumLibrary

Switch Window sporadically fails with TypeError

Ouverte
#1,964 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Python
Étoiles
1.5k
Forks
787
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Observed with

Python 3.13.0
SeleniumLibrary 6.7.1

Scenario

I have the following scenario in a test which fails sporadically:

  1. Link in an (internal) application is clicked which opens a different URL in a new tab
  2. Switch Window is called with the expected URL as locator and 10 s as a timeout
Expected behaviour

The new window is switched to. If the window is not immediately available/ready when this keyword is started, it should wait until the window can be switched to, within the given timeout limits.

Error

This works just fine most of the time, but occasionally I get the following error:
TypeError: cannot unpack non-iterable NoneType object
This error shows up pretty much instantly (within a few hundred ms), so the timeout is not taken into account.
However, in the associated screenshots, the expected page is always shown.

Analysis

I looked into the library's code and added some extra logging, which showed the error was coming from this line:
https://github.com/robotframework/SeleniumLibrary/blob/ce9d0ec510bd99c5a1b1cd114f767c7feeae1208/src/SeleniumLibrary/locators/windowmanager.py#L199

The call to self.driver.execute_script("return [ window.id, window.name ];") returns None, thus the assignment to the two variables fails with the above error.

Adding a 1 s sleep right before the call to execute_script makes the error no longer occur (even with many iterations of the test), so it does seem to be somehow timing related.
I guess there's a short timeframe where the window is there but not fully ready and this makes the function call fail? But I wasn't able to understand the exact nature of this presumed 'not ready' state so far.

Proposed solution

The TypeError could be added to the already present except, which successfully avoided failures due to this in my scenario.
Adding this would be trivial, but I'm not sure about the implications:

  • does anything depend on the current behaviour that raises an error in this case (seems not, but I'm not super familiar with the library's codebase)?
  • would it be appropriate to suppress this error in the library, given it is not fully understood what exactly the nature of the actual, underlying error is?
    Do you have any guidance how to proceed here?

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez dans src/SeleniumLibrary/locators/windowmanager.py, à la ligne qui décompose le résultat de execute_script("return [ window.id, window.name ];"). Reproduisez le scénario Switch Window avec un nouvel onglet ouvert avec un délai et examinez la gestion des exceptions existante ainsi que le flux de timeout. Le travail est considéré comme terminé lorsque le TypeError intermittent est corrigé sans perturber le changement de fenêtre ni le comportement de timeout demandé.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
testing-qa
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.