assertequals java selenium-webdriver assertion

assertequals - assert selenium java



Asegúrate de que WebElement no está presente con Selenium WebDriver con Java (12)

Con Selenium Webdriver sería algo como esto:

assertTrue(!isElementPresent(By.linkText("Empresas en Misión")));

En las pruebas que escribo, si deseo afirmar que WebElement está presente en la página, puedo hacer un simple:

driver.findElement(By.linkText("Test Search"));

Esto pasará si existe y explotará si no existe. Pero ahora quiero afirmar que un enlace no existe. No estoy seguro de cómo hacerlo ya que el código anterior no devuelve un booleano.

EDITAR Así es como se me ocurrió mi propia solución, me pregunto si todavía hay una mejor manera de salir.

public static void assertLinkNotPresent (WebDriver driver, String text) throws Exception { List<WebElement> bob = driver.findElements(By.linkText(text)); if (bob.isEmpty() == false) { throw new Exception (text + " (Link is present)"); } }


Creo que solo puedes atrapar org.openqa.selenium.NoSuchElementException que org.openqa.selenium.NoSuchElementException driver.findElement si no existe dicho elemento:

import org.openqa.selenium.NoSuchElementException; .... public static void assertLinkNotPresent(WebDriver driver, String text) { try { driver.findElement(By.linkText(text)); fail("Link with text <" + text + "> is present"); } catch (NoSuchElementException ex) { /* do nothing, link is not present, assert is passed */ } }


Es más fácil hacer esto:

driver.findElements(By.linkText("myLinkText")).size() < 1


Hay una clase llamada ExpectedConditions :

By loc = ... Boolean notPresent = ExpectedConditions.not(ExpectedConditions.presenceOfElementLocated(loc)).apply(getDriver()); Assert.assertTrue(notPresent);



Para appium 1.6.0 y superior

WebElement button = (new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//XCUIElementTypeButton[@name=''your button'']")))); button.click(); Assert.assertTrue(!button.isDisplayed());


Para node.js he encontrado lo siguiente para ser una manera efectiva de esperar que un elemento ya no esté presente:

// variable to hold loop limit var limit = 5; // variable to hold the loop count var tries = 0; var retry = driver.findElements(By.xpath(selector)); while(retry.size > 0 && tries < limit){ driver.sleep(timeout / 10) tries++; retry = driver.findElements(By.xpath(selector)) }


Parece que findElements() solo regresa rápidamente si encuentra al menos un elemento. De lo contrario, espera el tiempo de espera de espera implícito, antes de devolver cero elementos, al igual que findElement() .

Para mantener la velocidad de la prueba bien, este ejemplo acorta temporalmente la espera implícita, mientras espera que el elemento desaparezca:

static final int TIMEOUT = 10; public void checkGone(String id) { FluentWait<WebDriver> wait = new WebDriverWait(driver, TIMEOUT) .ignoring(StaleElementReferenceException.class); driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS); try { wait.until(ExpectedConditions.numberOfElementsToBe(By.id(id), 0)); } finally { resetTimeout(); } } void resetTimeout() { driver.manage().timeouts().implicitlyWait(TIMEOUT, TimeUnit.SECONDS); }

Todavía estoy buscando una forma de evitar el tiempo de espera por completo ...


Prueba esto -

private boolean verifyElementAbsent(String locator) throws Exception { try { driver.findElement(By.xpath(locator)); System.out.println("Element Present"); return false; } catch (NoSuchElementException e) { System.out.println("Element absent"); return true; } }


Puede utilizar el marco Arquillian Graphene para esto. Así que un ejemplo para su caso podría ser

Graphene.element(By.linkText(text)).isPresent().apply(driver));

También le proporciona muchos API agradables para trabajar con Ajax, esperas fluidas, objetos de página, fragmentos, etc. Definitivamente facilita mucho el desarrollo de pruebas basadas en Selenium.


findElement comprobará la fuente html y devolverá verdadero incluso si el elemento no se muestra. Para verificar si un elemento se muestra o no, use -

private boolean verifyElementAbsent(String locator) throws Exception { boolean visible = driver.findElement(By.xpath(locator)).isDisplayed(); boolean result = !visible; System.out.println(result); return result; }


boolean titleTextfield = driver.findElement(By.id("widget_polarisCommunityInput_113_title")).isDisplayed(); assertFalse(titleTextfield, "Title text field present which is not expected");