Descubrí que en C#
ya sea que use la WebDriverWait class
o la DefaultWait class
, en cualquier caso, el método IgnoreExceptionTypes
parece no funcionar.
Es decir, en cualquier caso, cuando se ejecuta contra mi página, se lanza una StaleElementReferenceException
a pesar de que estoy instruyendo al código para que ignore estas excepciones.
Ejemplo WebDriverWait
:
public void WaitElementToBeClickable(IWebElement element) { var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(60)); wait.IgnoreExceptionTypes(typeof(NoSuchElementException), typeof(StaleElementReferenceException)); wait.Until(ExpectedConditions.ElementToBeClickable(element)); }
Ejemplo de espera predeterminada:
public IWebElement SafeWaitForDisplayed(IWebElement webElement) { var w = new DefaultWait<IWebElement>(webElement); w.Timeout = TimeSpan.FromSeconds(30); w.IgnoreExceptionTypes(typeof(NoSuchElementException), typeof(StaleElementReferenceException)); return w.Until(ctx => { var elem = webElement; if (elem.Displayed) return elem; else return null; }); }
Cualquier sugerencia recibida con gratitud. Parece que hay muy poco en la web sobre el uso de este método en particular y otros han descubierto que tampoco funciona sin que se sugieran soluciones alternativas.
Los IgnoreExceptionTypes
solo durarán durante la espera hasta que se agote el tiempo de espera. Estoy usando DefaultWait
y, como usted, esperaba que volviera nulo. No es asi. Cuando se alcanza el tiempo de espera, arrojará la excepción. En consecuencia, lo he encerrado en una captura de prueba para manejar la excepción de manera adecuada en el tiempo de espera.