Ho un metodo di utilità per passare alla finestra desiderata come illustrato di seguito
public class Utility
{
public static WebDriver getHandleToWindow(String title){
//parentWindowHandle = WebDriverInitialize.getDriver().getWindowHandle(); // save the current window handle.
WebDriver popup = null;
Set<String> windowIterator = WebDriverInitialize.getDriver().getWindowHandles();
System.err.println("No of windows : " + windowIterator.size());
for (String s : windowIterator) {
String windowHandle = s;
popup = WebDriverInitialize.getDriver().switchTo().window(windowHandle);
System.out.println("Window Title : " + popup.getTitle());
System.out.println("Window Url : " + popup.getCurrentUrl());
if (popup.getTitle().equals(title)){
System.out.println("Selected Window Title : " + popup.getTitle());
return popup;
}
}
System.out.println("Window Title :" + popup.getTitle());
System.out.println();
return popup;
}
}
Essa vi porterà a finestra desiderata volta del titolo della finestra è passato come parametro. Nel tuo caso puoi farlo.
Webdriver childDriver = Utility.getHandleToWindow("titleOfChildWindow");
e poi di nuovo passare alla finestra padre utilizzando lo stesso metodo
Webdriver parentDriver = Utility.getHandleToWindow("titleOfParentWindow");
Questo metodo funziona in modo efficace quando si tratta di finestre multiple.
fonte
2013-10-01 09:50:18
Ora non posso immettere i valori nella casella di testo di una nuova finestra attraverso il mio code.String parentHandle = driver.getWindowHandle(); \t \t \t driver.findElement (By.id ("ImageButton5")). Click(); per (String winHandle: driver.getWindowHandles()) { \t \t driver.switchTo(). Window (winHandle); \t \t \t \t \t \t Thread.sleep (3000); \t \t \t driver.findElement (By.id ("txtEnterCptCode")). SendKeys ("99219"); driver.findElement (By.id ("chklstAllprocedure_0")). Click(); L'errore che ho ottenuto non è stato in grado di trovare l'elemento textbox nella finestra appena aperta. Puoi aiutarmi? –
@Arun Kumar: forse webDriver sta cercando di trovare l'elemento prima che la pagina sia completamente caricata? Thead.sleep non è efficace perché tutto ciò che fa è attendere alcuni secondi prima di eseguire le prossime righe di codice. Prova la classe WebDriverWait.:::: WebDriverWait wait = new WebDriverWait (driver, 1000); Elemento WebElement = wait.until (Prevected Conditions.visibilityOfElementLocated (By.id ("txtEnterCptCode"))); element.sendKeys ("99219"); – CODEBLACK
WebDriverWait attenderà fino a quando l'elemento specificato non sarà visibile ... e una volta che sarà visibile continuerà a eseguire il codice ... – CODEBLACK