ventana pestaña cambiar java selenium-webdriver new-window

pestaña - ¿Cómo se maneja la nueva ventana en Selenium WebDriver usando Java?



cambiar de ventana selenium (6)

Este es mi código:

driver.findElement(By.id("ImageButton5")).click(); //Thread.sleep(3000); String winHandleBefore = driver.getWindowHandle(); driver.switchTo().window(winHandleBefore); driver.findElement(By.id("txtEnterCptCode")).sendKeys("99219");

Ahora tengo el siguiente error:

Excepción en el hilo "main" org.openqa.selenium.NoSuchElementException: no se puede encontrar el elemento con id == txtEnterCptCode (ADVERTENCIA: El servidor no proporcionó ninguna información de la pila) Duración o tiempo de espera del comando: 404 milisegundos.

¿Algunas ideas?


Parece que en realidad no estás cambiando a ninguna ventana nueva. Se supone que debes obtener el identificador de ventana de tu ventana original, guardar eso, luego obtener el identificador de ventana de la nueva ventana y cambiar a eso. Una vez que haya terminado con la nueva ventana, debe cerrarla, luego volver al manejador original de la ventana. Ver mi muestra a continuación:

es decir

String parentHandle = driver.getWindowHandle(); // get the current window handle driver.findElement(By.xpath("//*[@id=''someXpath'']")).click(); // click some link that opens a new window for (String winHandle : driver.getWindowHandles()) { driver.switchTo().window(winHandle); // switch focus of WebDriver to the next found window handle (that''s your newly opened window) } //code to do something on new window driver.close(); // close newly opened window when done with it driver.switchTo().window(parentHandle); // switch back to the original window


Tengo un método de utilidad para cambiar a la ventana requerida como se muestra a continuación

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

Te llevará a la ventana deseada una vez que el título de la ventana se pase como parámetro. En tu caso, puedes hacer.

Webdriver childDriver = Utility.getHandleToWindow("titleOfChildWindow");

y luego cambiar de nuevo a la ventana primaria usando el mismo método

Webdriver parentDriver = Utility.getHandleToWindow("titleOfParentWindow");

Este método funciona de manera efectiva cuando se trata de múltiples ventanas.


Tengo un programa de ejemplo para esto:

clase pública BrowserBackForward {

/** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { WebDriver driver = new FirefoxDriver(); driver.get("http://seleniumhq.org/"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //maximize the window driver.manage().window().maximize(); driver.findElement(By.linkText("Documentation")).click(); System.out.println(driver.getCurrentUrl()); driver.navigate().back(); System.out.println(driver.getCurrentUrl()); Thread.sleep(30000); driver.navigate().forward(); System.out.println("Forward"); Thread.sleep(30000); driver.navigate().refresh(); }

}


string BaseWindow = driver.CurrentWindowHandle; ReadOnlyCollection<string> handles = driver.WindowHandles; foreach (string handle in handles) { if (handle != BaseWindow) { string title = driver.SwitchTo().Window(handle).Title; Thread.Sleep(3000); driver.SwitchTo().Window(handle).Title.Equals(title); Thread.Sleep(3000); } }


Set<String> windows = driver.getWindowHandles(); Iterator<String> itr = windows.iterator(); //patName will provide you parent window String patName = itr.next(); //chldName will provide you child window String chldName = itr.next(); //Switch to child window driver.switchto().window(chldName); //Do normal selenium code for performing action in child window //To come back to parent window driver.switchto().window(patName);


Estaba teniendo algunos problemas con Windowhandle y probé este. este funciona bien para mi

String parentWindowHandler = driver.getWindowHandle(); String subWindowHandler = null; Set<String> handles = driver.getWindowHandles(); Iterator<String> iterator = handles.iterator(); while (iterator.hasNext()){ subWindowHandler = iterator.next(); driver.switchTo().window(subWindowHandler); System.out.println(subWindowHandler); } driver.switchTo().window(parentWindowHandler);