Tengo un problema al automatizar una aplicación web con el controlador web de selenio.¿Cómo puede saber el controlador web de selenio cuándo se ha abierto la nueva ventana y luego reanudar su ejecución?
La página web tiene un botón que al hacer clic se abre en una nueva ventana. Cuando utilizo el siguiente código, que arroja OpenQA.Selenium.NoSuchWindowException: No window found
WebDriver.FindElement(By.Id("id of the button that opens new window")).Click();
//Switch to new window
_WebDriver.SwitchTo().Window("new window name");
//Click on button present on the newly opened window
_WebDriver.FindElement(By.Id("id of button present on newly opened window")).Click();
Para resolver el problema anterior añado Thread.Sleep(50000);
entre el botón de clic y SwitchTo
declaraciones.
WebDriver.FindElement(By.Id("id of the button that opens new window")).Click();
Thread.Sleep(50000); //wait
//Switch to new window
_WebDriver.SwitchTo().Window("new window name");
//Click on button present on the newly opened window
_WebDriver.FindElement(By.Id("id of button present on newly opened window")).Click();
Se resolvió el problema, pero no quiero utilizar la instrucción Thread.Sleep(50000);
porque si la ventana toma más tiempo para abrir, el código puede fallar y si la ventana se abre rápidamente y luego se hace la prueba lenta innecesariamente.
¿Hay alguna manera de saber cuándo se ha abierto la ventana y luego la prueba puede reanudar su ejecución?
Gracias por la respuesta. Está funcionando. – Ozone
Puede haber un caso cuando se abre la nueva pestaña pero aún no se ha agregado el mango a la instancia de la unidad. Mi solución es antes de hacer clic en obtener el conteo actual del controlador y luego en el interior mientras compruebo si el conteo ha cambiado. Solo entonces, cambie a la pestaña recién abierta como esta 'driver.switchTo(). Window (maneja [handles.count() - 1]);' donde 'handle' se actualiza en cada iteración. – Edgar