expectedconditions c# selenium-webdriver

c# - expectedconditions - Selenio-Espere hasta que el elemento NO sea visible



selenium c# delay (8)

En el siguiente código, intento esperar hasta que un elemento esté visible:

var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.ElementIsVisible(By.Id("processing")));

¿Es posible decirle al conductor que espere hasta que ese elemento NO sea visible?


En el siguiente código que se usa para detener el controlador por unos segundos

System.Threading.Thread.Sleep (20000);


Lo siguiente debe esperar hasta que el elemento ya no se muestre, es decir, no visible (o tiempo de espera después de 10 segundos)

var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(10)); wait.Until(driver => !driver.FindElement(By.Id("processing")).Displayed);

Lanzará una excepción si no se puede encontrar un elemento con el processing identificación.


Sé que esto es viejo, pero como estaba buscando una solución a esto, pensé en agregar mis pensamientos.

La respuesta dada arriba debería funcionar si configura la propiedad IgnoreExceptionTypes:

var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(10)); wait.IgnoreExceptionTypes = new[] { typeof(NoSuchElementException) } wait Until(driver => !driver.FindElement(By.Id("processing")).Displayed);


Sí, es posible con el método invisibilityOfElementLocated

wait.until(ExpectedConditions.invisibilityOfElementLocated(locator));


Sí, puedes crear tu propia ExpectedCondition, solo revertir visible a no visible .

Aquí es cómo hacerlo en Python:

from selenium.webdriver.support.expected_conditions import _element_if_visible class invisibility_of(object): def __init__(self, element): self.element = element def __call__(self, ignored): return not _element_if_visible(self.element)

Y cómo usarlo:

wait = WebDriverWait(browser, 10) wait.until(invisibility_of(elem))


Use el método de invisibilidad, y aquí hay un uso de ejemplo.

final public static boolean waitForElToBeRemove(WebDriver driver, final By by) { try { driver.manage().timeouts() .implicitlyWait(0, TimeUnit.SECONDS); WebDriverWait wait = new WebDriverWait(UITestBase.driver, DEFAULT_TIMEOUT); boolean present = wait .ignoring(StaleElementReferenceException.class) .ignoring(NoSuchElementException.class) .until(ExpectedConditions.invisibilityOfElementLocated(by)); return present; } catch (Exception e) { return false; } finally { driver.manage().timeouts() .implicitlyWait(DEFAULT_TIMEOUT, TimeUnit.SECONDS); } }


public void WaitForElementNotVisible(string id, int seconds) { try { var wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(seconds)); wait.Until(driver1 => !visibility(id)); Console.WriteLine("Element is not visible.."); } catch (WebDriverTimeoutException) { Assert.Fail("Element is still visible.."); } } bool visibility(string id) { bool flag; try { flag = driver.FindElement(By.Id(locator)).Displayed; } catch (NoSuchElementException) { flag = false; } return flag; }


var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(10)); wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("processing")));

La idea es esperar hasta que el elemento no sea visible. La primera línea establece el tiempo de espera para que el elemento desaparezca; aquí son 10 segundos. La segunda línea usa selenio para verificar si se cumple la condición "invisibilityofElementLocated". El elemento se encuentra por su ID como en el caso del tema, es decir id="processing" . Si el elemento no desaparece en el período de tiempo solicitado, se generará una excepción de tiempo de espera y la prueba fallará.