Comment gérer la fenêtre contextuelle dans Selenium WebDriver en utilisant Java


Je veux gérer la partie de connexion dans rediff.com, mais le code ci-dessous ne fonctionne pas pour cela:

driver.get("http://www.rediff.com/");
WebElement sign = driver.findElement(By.xpath("//html/body/div[3]/div[3]/span[4]/span/a"));
sign.click();
String myWindowHandle = driver.getWindowHandle();
driver.switchTo().window(myWindowHandle);
WebElement email_id= driver.findElement(By.xpath("//*[@id='signin_info']/a[1]"));
email_id.sendKeys("hi");

Si myWindowHandle n'est pas la bonne chaîne, faites-moi savoir comment obtenir le nom de la fenêtre contextuelle, car je ne trouve pas le nom de la fenêtre contextuelle.

Author: pnuts, 2013-10-16

8 answers

Pour passer à une fenêtre contextuelle, vous devez utiliser getWindowHandles() et les parcourir.

Dans votre code, vous utilisez getWindowHandle() qui vous donnera la fenêtre parent elle-même.

String parentWindowHandler = driver.getWindowHandle(); // Store your parent window
String subWindowHandler = null;

Set<String> handles = driver.getWindowHandles(); // get all window handles
Iterator<String> iterator = handles.iterator();
while (iterator.hasNext()){
    subWindowHandler = iterator.next();
}
driver.switchTo().window(subWindowHandler); // switch to popup window

// Now you are in the popup window, perform necessary actions here

driver.switchTo().window(parentWindowHandler);  // switch back to parent window
 33
Author: LINGS, 2017-06-03 17:45:29

J'ai trouvé la solution pour le programme ci-dessus, qui avait pour but de signature http://rediff.com

public class Handle_popupNAlert
{
    public static void main(String[] args ) throws InterruptedException
    {
        WebDriver driver= new FirefoxDriver(); 
        driver.get("http://www.rediff.com/");
        WebElement sign = driver.findElement(By.xpath("//html/body/div[3]/div[3]/span[4]/span/a"));
        sign.click();

        Set<String> windowId = driver.getWindowHandles();    // get  window id of current window
        Iterator<String> itererator = windowId.iterator();   

        String mainWinID = itererator.next();
        String  newAdwinID = itererator.next();

        driver.switchTo().window(newAdwinID);
        System.out.println(driver.getTitle());
        Thread.sleep(3000);
        driver.close();

        driver.switchTo().window(mainWinID);
        System.out.println(driver.getTitle());
        Thread.sleep(2000);

        WebElement email_id= driver.findElement(By.xpath("//*[@id='c_uname']"));
        email_id.sendKeys("hi");
        Thread.sleep(5000);

        driver.close();
        driver.quit();
    }  
}
 11
Author: Niyati, 2013-10-17 07:39:47

Vous pouvez gérer la fenêtre contextuelle ou la boîte d'alerte:

Alert alert = driver.switchTo().alert();
alert.accept();

Vous pouvez également refuser la boîte d'alerte:

Alert alert = driver.switchTo().alert();
alert().dismiss();
 4
Author: ER.swatantra, 2015-01-31 07:36:40

Vous pouvez utiliser le code ci-dessous dans votre code lorsque vous obtenez une boîte de message d'alerte contextuelle de navigateur Web.

// Accepts (Click on OK) Chrome Alert Browser for RESET button.

Alert alertOK = driver.switchTo().alert();
alertOK.accept();



//Rejects (Click on Cancel) Chrome Browser Alert for RESET button.

Alert alertCancel = driver.switchTo().alert();
alertCancel.dismiss();
 4
Author: Manasis Mishra, 2016-05-16 06:30:24

Ne complexifiez pas la situation. Utilisez ID s'ils sont disponibles.

driver.get("http://www.rediff.com");
WebElement sign = driver.findElement(By.linkText("Sign in"));
sign.click();
WebElement email_id= driver.findElement(By.id("c_uname"));
email_id.sendKeys("hi");
 2
Author: Hemanth, 2014-10-01 15:22:16

Lorsque le message toastr est apparu sur l'écran de Firefox. la balise ci-dessous a été affichée dans fire bug.

<div class="toast-message">Invalid Credentials, Please check Password</div>.

J'ai pris la capture d'écran à l'époque. Et a fait les changements ci-dessous dans le code java selenium.

String alertText = "";
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("toast-message")));
WebElement toast1 = driver.findElement(By.className("toast-message"));  
alertText = toast1.getText();
System.out.println( alertText);

Et mon problème de toastr popup a été résolu.

 0
Author: Sandip, 2015-07-28 08:58:06
       //get the main handle and remove it
       //whatever remains is the child pop up window handle

       String mainHandle = driver.getWindowHandle();
       Set<String> allHandles = driver.getWindowHandles();
       Iterator<String> iter = allHandles.iterator();
       allHandles.remove(mainHandle);
       String childHandle=iter.next();
 -1
Author: Satheesh kumar, 2014-11-20 11:46:06
public void Test(){

     WebElement sign = fc.findElement(By.xpath(".//*[@id='login-scroll']/a"));
        sign.click();
        WebElement LoginAsGuest=fc.findElement(By.xpath(".//*[@id='guest-login-option']"));
        LoginAsGuest.click();
        WebElement email_id= fc.findElement(By.xpath(".//*[@id='guestemail']"));
        email_id.sendKeys("[email protected]");
        WebElement ContinueButton=fc.findElement(By.xpath(".//*[@id='contibutton']"));
        ContinueButton.click();

}
 -1
Author: ankush deol, 2015-12-16 07:46:21