2013-10-16 11 views
20

voglio gestire parte sign-in in rediff.com, ma il codice qui sotto non funziona per questo:Come gestire pop-up in selenio WebDriver utilizzando Java

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"); 

Se myWindowHandle non è il stringa corretta, quindi fammi sapere come ottenere il nome della finestra popup, perché non riesco a trovare il nome della finestra pop-up.

+0

Prendere l'elenco delle finestre utilizzando driver.getWindowHandles(). –

risposta

32

Per passare ad una finestra pop-up, è necessario utilizzare getWindowHandles() e scorrere attraverso di loro.

Nel codice si utilizza getWindowHandle() che fornirà la finestra principale stessa.

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

Ma ho solo bisogno di gestire solo una finestra di quella che penso quindi non ha senso usare l'iteratore ... hai un altro modo. Ho solo bisogno di scrivere indirizzo e-mail e password sotto forma di rediff.com. pls mi timidi in questo. – Niyati

+0

Il codice sopra lo gestirà. Una volta che si passa alla finestra secondaria che è il tuo popup.Scegli gli elementi web e inserisci l'ID e-mail, la password e invia. Quindi torna alla finestra principale. – LINGS

+1

Provato ma il codice non funziona sul collegamento: rediff.com -> fai clic sul link di accesso e prova a firmare – Niyati

2

Non complicare la situazione. Utilizzare ID se sono disponibili.

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"); 
+0

Non posso usare direttamente il campo email_id come nella finestra pop-up ..pls visita rediff.com come voglio scrivere indirizzo e-mail e password sotto forma di rediff.com. link: http://www.rediff.com/ – Niyati

+0

quale browser stai usando? Perché non vedo alcuna finestra popup dopo aver fatto clic sull'accesso. è solo un'altra finestra modale (all'interno della finestra principale). sto usando firefox23. – Hemanth

+0

yeh ho bisogno di accedere a quello e firmato in – Niyati

11

ho trovato la soluzione per il programma di cui sopra, che aveva l'obiettivo della firma a 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(); 
    } 
} 
-1
 //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(); 
4

È possibile gestire finestra popup o finestra di avviso:

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

È inoltre possibile rifiutare la finestra di avviso:

Alert alert = driver.switchTo().alert(); 
alert().dismiss(); 
+0

Questo ha funzionato per me – sinisterrook

0

Quando il messaggio toastr si apre sullo schermo di firefox. il tag sottostante è stato visualizzato nell'incendio.

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

Ho scattato l'immagine in quel momento. E ha fatto i seguenti cambiamenti nel codice java selenio.

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

E il mio problema di toastr popup ha fatto risolto.

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

} 
4

È possibile utilizzare il codice riportato di seguito all'interno del codice quando si riceve una finestra di messaggio di avviso popup.

// 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(); 
+0

Puoi utilizzare il codice di cui sopra all'interno del codice quando si riceve una finestra di messaggio di avviso popup. –

Problemi correlati