web-dev-qa-db-fra.com

Comment gérer les fenêtres contextuelles dans Selenium WebDriver à l'aide de Java

Je souhaite gérer la partie de connexion sur 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 chaîne correcte, laissez-moi savoir comment obtenir le nom de la fenêtre contextuelle, car je ne trouve pas le nom de la fenêtre contextuelle.

21
Niyati

Pour basculer vers une fenêtre contextuelle, vous devez utiliser getWindowHandles() et le parcourir.

Dans votre code, vous utilisez getWindowHandle() qui vous donnera la fenêtre parente 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
35
LINGS

J'ai trouvé la solution pour le programme ci-dessus, qui avait pour objectif de se connecter à 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
Niyati

Vous pouvez gérer une fenêtre contextuelle ou une 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
ER.swatantra

Vous pouvez utiliser le code ci-dessous dans votre code lorsque vous recevez un message d'alerte contextuel du 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
Manasis Mishra

Ne compliquez 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
Hemanth

Lorsque le message toastr est apparu sur l'écran de firefox. la balise ci-dessous était affichée dans un bug de feu. 

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

J'ai pris la capture d'écran à ce moment-là ... et les modifications ci-dessous dans le code Selenium Java.

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
Sandip
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();

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
0
user3150673