until for expectedconditions expected example conditions chrome java selenium webdriver selenium-webdriver wait

java - for - Selenium Webdriver "Condicionesesperadas.not" no funciona como se esperaba



wait for element selenium webdriver java (4)

WebDriverWait wait = new WebDriverWait(driver, 60) WebElement element = driver.findElement(By.xpath("//div[contains(text(),''Loading...'')]")); System.out.println("Test"); wait.until(ExpectedConditions.not(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[contains(text(),''Loading...'')]")))); System.out.println("Test");

Intentando esperar a que se complete la carga de la página. La primera "prueba" se imprime en la consola y debajo se imprime la excepción al exceder el enunciado wait.until. Incluso después de que la pantalla de carga se haya agotado, wait.until aún está esperando. Ya intenté la obsolescencia del elemento y no funciona, obteniendo la misma excepción de tiempo de espera. Una vez que se completa la carga, el elemento ya no está disponible en el DOM


no está esperando que el elemento sea visible en la primera declaración, es decir,

Elemento WebElement = driver.findElement (By.xpath ("// div [contains (text (), ''Loading ...'')]"));

Creo que esto está causando la NoSuchElementException ...
puedes probar lo siguiente:

new WebDriverWait(driver,60).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(),''Loading...'')]"))); new WebDriverWait(driver,60).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[contains(text(),''Loading...'')]")));

el código anterior primero esperará la visibilidad del elemento y luego su invisibilidad.


Cuando desee esperar a que el elemento no esté presente, en lugar de presenceOfElementLocated use presenceOfAllElementsLocatedBy :

wait.until(ExpectedConditions.not(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//div[contains(text(),''Loading...'')]"))));

Esperará hasta que no haya elementos en la página que se ajusten al localizador.


Si va a utilizar esto varias veces, cree un método. Por ejemplo, si esperas otros elementos en otro lugar.

public void waitForElementToBeVisible(String xpath) throws Throwable { try { WebDriverWait wait = new WebDriverWait(driver, 15); wait.until(ExpectedConditions.or( ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath)) )); } catch(Exception e) { System.out.println("Timeout exceeded"); driver.close(); } }

A continuación, puede llamar a este método varias veces. Llamar al que está atrapado sería

waitForElementToBeVisible("//div[contains(text(),''Loading...'')]");


nuevo WebDriverWait (driver, TimeSpan.FromSeconds (10)). Until (d => d.FindElement (By.Id ("searchTextBox0")). Visualizado)