web-dev-qa-db-fra.com

Comment fermer toute la fenêtre du navigateur en maintenant WebDriver actif?

Dans mon exécution par lots, plusieurs navigateurs avec plusieurs onglets sont ouverts pour le premier scénario. Je voulais fermer tous ces navigateurs avant de commencer le deuxième scénario.

Driver.close() ne ferme qu'un onglet du navigateur. Driver.quit() ferme tous les navigateurs et met également fin à la session WebDriver. Donc, je suis incapable d'exécuter l'exécution par lots. S'il vous plaît fournir une solution pour cela.

14
Rahul

L'explication ci-dessous devrait expliquer la différence entre les méthodes driver.close et driver.quit dans WebDriver. J'espère que tu trouves cela utile.

driver.close et driver.quit sont deux méthodes différentes pour fermer la session du navigateur dans Selenium WebDriver.

Comprendre les deux et savoir quand utiliser chaque méthode est important pour l'exécution de votre test. Par conséquent, j'ai essayé de faire la lumière sur ces deux méthodes.

driver.close - Cette méthode ferme la fenêtre du navigateur sur laquelle le focus est défini. driver.quit ferme la session de webdriver tandis que driver.close ferme uniquement la fenêtre en cours sur laquelle le contrôle Selenium est présent mais la session webdriver ne ferme pas encore, si aucune autre fenêtre ne s'ouvre et vous appelez driver.close alors il ferme également la session de webdriver.

driver.quit - Cette méthode appelle fondamentalement driver.dispose une méthode désormais interne qui ferme toutes les fenêtres du navigateur et met fin à la session WebDriver de manière élégante.

driver.dispose - Comme mentionné précédemment, il s'agit d'une méthode interne de WebDriver qui a été supprimée en mode silencieux conformément à une autre réponse - Vérification nécessaire. Cette méthode n'a pas vraiment de cas d'utilisation dans un flux de travail de test normal, car l'une ou l'autre des méthodes précédentes devrait fonctionner pour la plupart des cas d'utilisation.

Explication du cas d'utilisation: Vous devez utiliser driver.quit chaque fois que vous souhaitez terminer le programme. Il fermera toutes les fenêtres de navigateur ouvertes et mettra fin à la session WebDriver. Si vous n'utilisez pas driver.quit à la fin du programme, la session WebDriver ne se fermera pas correctement et les fichiers ne seraient pas effacés de la mémoire. Cela peut entraîner des erreurs de fuite de mémoire.

............

Maintenant, dans ce cas, vous devez utiliser un navigateur spécifique. Le code ci-dessous ferme toutes les fenêtres enfants, sauf la fenêtre principale.

String homeWindow = driver.getWindowHandle();
Set<String> allWindows = driver.getWindowHandles();

//Use Iterator to iterate over windows
Iterator<String> windowIterator =  allWindows.iterator();

//Verify next window is available
while(windowIterator.hasNext())
{
    //Store the Recruiter window id
    String childWindow = windowIterator.next();
}

//Here we will compare if parent window is not equal to child window 
if (homeWindow.equals(childWindow))
{
    driver.switchTo().window(childWindow);
    driver.close();
}

Maintenant, ici, vous devez modifier ou ajouter la condition en fonction de vos besoins.

if (homeWindow.equals(childWindow))
{
    driver.switchTo().window(childWindow);
    driver.close();
}

Actuellement, il vérifie uniquement si la fenêtre d’accueil est égale à Childwindow ou non. Ici, vous devez spécifier la condition comme quel identifiant vous voulez fermer. Je n'ai jamais essayé, je vous ai donc suggéré le moyen de répondre à vos besoins.

6
Shubham Jain

Vous devriez comprendre la différence entre driver.close() et driver.quit()

driver.close() et driver.quit() sont deux méthodes différentes pour fermer la session du navigateur dans Selenium WebDriver. Comprendre les deux et savoir quand utiliser quelle méthode est importante dans l'exécution de votre test.

driver.close() - Il ferme la fenêtre du navigateur sur laquelle le focus est défini.

driver.quit() - Elle appelle fondamentalement la méthode driver.dispose qui, à son tour, ferme toutes les fenêtres du navigateur et met fin à la session WebDriver de manière élégante.

Vous devez utiliser driver.quit() chaque fois que vous souhaitez terminer le programme. Il fermera toutes les fenêtres de navigateur ouvertes et mettra fin à la session WebDriver. Si vous n'utilisez pas driver.quit à la fin du programme, la session WebDriver ne se fermera pas correctement et les fichiers ne seraient pas effacés de la mémoire. Cela peut entraîner des erreurs de fuite de mémoire.

Dans votre cas, vous devez utiliser driver.close(), ce qui fermera la fenêtre actuelle et maintiendra le pilote actif.

Juste pour ajouter - si seulement la fenêtre du navigateur est ouverte et que vous utilisez driver.close(), il quittera la session webdriver. Le WebDriver ne restera pas actif.

33
Sanjay Bhimani

Ce code ferme toutes les fenêtres ouvertes puis ramène le contrôle à la fenêtre principale.

public static void switchTab() {            
    try {
        Set<String> windows = webDriver.getWindowHandles();
        Iterator<String> iter = windows.iterator();
        String[] winNames=new String[windows.size()];
        int i=0;
        while (iter.hasNext()) {
            winNames[i]=iter.next();
            i++;
        }

        if(winNames.length > 1) {
            for(i = winNames.length; i > 1; i--) {
                webDriver.switchTo().window(winNames[i - 1]);
                webDriver.close();
            }
        }
        webDriver.switchTo().window(winNames[0]);
    }
    catch(Exception e){         
        e.printStackTrace();
    }
}
1
Rahul