web-dev-qa-db-fra.com

Comment fermer la fenêtre du navigateur enfant dans Selenium WebDriver avec Java

Après avoir basculé vers une nouvelle fenêtre et terminé la tâche, je souhaite fermer cette nouvelle fenêtre et basculer vers l’ancienne fenêtre.

donc ici j'ai écrit comme code:

// Perform the click operation that opens new window

String winHandleBefore = driver.getWindowHandle();

    // Switch to new window opened

    for (String winHandle : driver.getWindowHandles()) {
        driver.switchTo().window(winHandle);
    }

    // Perform the actions on new window


    driver.findElement(By.id("edit-name")).clear();
    WebElement userName = driver.findElement(By.id("edit-name"));
    userName.clear();
              try
    {
        driver.quit();
    }

    catch(Exception e)
    {
        e.printStackTrace();
        System.out.println("not close");
                }

driver.switchTo().window(winHandleBefore);// Again I want to start code this old window

Ci-dessus, j'ai écrit le code driver.quit() ou driver.close(). Mais je reçois une erreur. Quelqu'un peut-il m'aider ...?

org.openqa.Selenium.remote.SessionNotFoundException: FirefoxDriver ne peut pas être utilisé après l'appel de quit ().

30
NandKishor

Pour fermer une seule fenêtre de navigateur:

driver.close();

Pour fermer toutes les fenêtres du navigateur (parent + enfant) et mettre fin à la session entière:

driver.quit();
53
Mark Rowlands

La logique que vous avez utilisée pour commuter le contrôle en popup est fausse

 for (String winHandle : driver.getWindowHandles()) {
        driver.switchTo().window(winHandle);
    }

Comment la logique ci-dessus va-t-elle passer le contrôle dans une nouvelle fenêtre?


Utilisez la logique ci-dessous pour basculer le contrôle dans une nouvelle fenêtre

// get all the window handles before the popup window appears
 Set beforePopup = driver.getWindowHandles();

// click the link which creates the popup window
driver.findElement(by).click();

// get all the window handles after the popup window appears
Set afterPopup = driver.getWindowHandles();

// remove all the handles from before the popup window appears
afterPopup.removeAll(beforePopup);

// there should be only one window handle left
if(afterPopup.size() == 1) {
          driver.switchTo().window((String)afterPopup.toArray()[0]);
 }

// Perform the actions on new window

  **`//Close the new window`** 
    driver.close();

//perform remain operations in main window

   //close entire webDriver session
    driver.quit();
4
Santoshsarma
//store instance of main window first using below code
String winHandleBefore = driver.getWindowHandle(); 

Effectuer l'opération de clic qui ouvre une nouvelle fenêtre

//Switch to new window opened
for (String winHandle : driver.getWindowHandles()) {
    driver.switchTo().window(winHandle);
}

// Perform the actions on new window
driver.close(); //this will close new opened window

//switch back to main window using this code
driver.switchTo().window(winHandleBefore);

// perform operation then close and quit
driver.close();
driver.quit();
3
bugCracker
public class First {
    public static void main(String[] args) {
        System.out.println("Welcome to Selenium");
        WebDriver wd= new FirefoxDriver();
        wd.manage().window().maximize();
        wd.get("http://opensource.demo.orangehrmlive.com/");
        wd.findElement(By.id("txtUsername")).sendKeys("Admin");
        wd.findElement(By.id("txtPassword")).sendKeys("admin");
        wd.findElement(By.id("btnLogin")).submit();
        **wd.quit(); //--> this helps to close the web window automatically** 
        System.out.println("Tested Sucessfully ");
    }
}
0
Sunil Bhadrashetti

Il existe deux manières de fermer la fenêtre enfant unique:

Way 1:

driver.close();

Way 2: En utilisant les touches Ctrl + w du clavier:

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "w");
0
Ripon Al Wasim

Dans certains cas, une fenêtre se ferme après l'obtention d'un descripteur de fenêtre valide auprès de getWindowHandle () ou getWindowHandles ().

Il est même possible qu'une fenêtre se ferme d'elle-même pendant que getWindowHandles () est en cours d'exécution, à moins que vous ne créiez un code de type de section critique (c'est-à-dire que vous bloquez le navigateur pendant l'exécution du code de test jusqu'à ce que toutes les opérations de gestion de fenêtre soient terminées).

Un moyen plus rapide de vérifier la validité du pilote actuel est de vérifier l’identificateur sessionId, qui est rendu nul par driver.close () ou par la fenêtre qui se ferme elle-même.

WebDriver doit être transtypé vers l'interface du pilote distant (RemoteWebDriver) afin d'obtenir l'identificateur de session, comme suit:

if (null == ((RemoteWebDriver)driver).sessionId) {
    // current window is closed, switch to another or quit
} else {
    // current window is open, send commands or close
}

Notez également que la fermeture de la dernière fenêtre équivaut à quit ().

0
CharlieS