Solución:
prueba esto :
WebDriverWait wait = new WebDriverWait(driver , 1000) ;
wait.until(ExcepctedConditions.elementToBeClickable(ById("element"));
El elemento puede ser el ID de cualquier elemento presente en la siguiente página a la que se le redirige. Una vez que la página se cargue por completo, comenzará a ejecutar su código.
En lugar de Click
podrías intentar usar SendKeys
. diferente a Click
, SendKeys
no espera a que la página termine de cargarse antes de reanudar la ejecución del código. Entonces puedes hacer algo como esto:
WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(0, 5, 0));
elem.SendKeys(Keys.Enter);
wait.Until<bool>((_driver) =>
{
//Check here if results have loaded yet
return true;
});
Como nota al margen, estoy bastante seguro Until
toma un IWebBrowser
como entrada, no como elemento, por lo que no puede hacer clic en elem
.
Además de la solución de prestomanifesto, puedo ofrecer una solución menos que ideal a la que implementé para resolver este problema. Resulta que está lanzando una excepción, sin respuesta, etc., así que simplemente lo rodeé en un intento de captura y luego esperé a que se cerrara la ventana emergente, lo que parece funcionar bien.
Puede sustituir lo que quiera en su bucle, solo asegúrese de poner un contador para que no se repita para siempre.
try
{
element.Click();
}
catch
{
cnt++;
do
{
//wait for whatever
cnt++;
Thread.Sleep(1000);
// Wait for 30 seconds for popup to close
} while (!string.IsNullOrEmpty(browser.CurrentWindowHandle) && cnt < 30);
}