2011-06-15 9 views
10

En Selenium 2 Quiero asegurarme de que no exista un elemento en la página cargado por el controlador. Estoy incluyendo mi implementación ingenua aquí.Cómo verifico que un elemento no existe en Selenium 2

WebElement deleteLink = null; 
    try { 
     deleteLink = driver.findElement(By.className("commentEdit")); 
    } catch (NoSuchElementException e) { 

    } 
    assertTrue(deleteLink != null); 

¿Hay una manera más elegante que básicamente verifica afirmar que NoSuchElementException fue arrojado?

Respuesta

26

Si está probando el uso de JUnit y que es lo único que se está probando que podría hacer la prueba de esperar una excepción usando

@Test (expected=NoSuchElementException.class) 
public void someTest() { 
    driver.findElement(By.className("commentEdit")); 
} 

O puede utilizar el método findElements que devuelve una lista de elementos o una lista vacía si no se encuentra ninguno (no tira NoSuchElementException):

... 
List<WebElement> deleteLinks = driver.findElements(By.className("commentEdit")); 
assertTrue(deleteLinks.isEmpty()); 
... 

o

.... 
assertTrue(driver.findElements(By.className("commentEdit")).isEmpty()); 
.... 
+0

Perfecto, ¡exactamente lo que estaba buscando! ¡Muchas gracias! – Han

+0

Buena solución. Sin embargo, tiene problemas con ImplicitWait, ya que las llamadas a findElement (s) implícitamente esperan a que aparezca el elemento. – tishma

+1

Puede solucionarlo estableciendo el tiempo de espera en 1 segundo o el tiempo de espera que desee. Lo configuré como predeterminado, por lo que en mi solución, creé un método de extensión .net para agregar un método .exists(). driver.Manage(). Timeouts(). ImplicitlyWait (TimeSpan.FromSeconds (1)); –

2

Divido las clases de página para que no tenga que definir elementos más de una vez. Mis clases de prueba nunit y mbunit llaman a esas clases de página. Aún no lo he probado, pero así es como estoy pensando en hacerlo, así puedo usar .exists() como lo hice con WatiN.

Clase Extensión:

public static class ExtensionMethods 
{ 
    public static IWebElement ElementById(this IWebDriver driver, string id) 
    { 
     IWebElement e = null; 
     try 
     { 
     e = driver.FindElement(By.Id(id)); 
     } 
     catch (NoSuchElement){} 
     return e; 
    } 
    public static bool Exists(this IWebElement e) 
    { 
     if (e == null) 
     return false; 
     return true; 
    } 
} 

Página Clase:

public IWebElement SaveButton { get { try { return driver.ElementById("ctl00_m_m_body_body_cp2_btnSave")); } } 

clase de prueba:

MyPageClass myPageClass = new MyPageClass(driver); 
if (myPageClass.SaveButton.Exists()) 
{ 
    Console.WriteLine("element doesn't exist"); 
} 
+0

driver.Manage(). Timeouts(). ImplicitlyWait (TimeSpan.FromSeconds (1)); –

-3

Uso assertF alse :)

assertFalse(isElementPresent(By.className("commentEdit"))); 
+0

¡No existe tal método! – SiKing

4

Puede utilizar esta:

Boolean exist = driver.findElements(By.whatever(whatever)).size() == 0; 

Si no existe devolverá true.

1

Puede recuperar una lista de elementos utilizando driver.findElements ("Sus elementos") y luego buscar el elemento. si la lista no contiene el elemento, usted obtuvo su comportamiento deseado :)

Cuestiones relacionadas