2011-11-04 9 views
12

Estoy agregando pruebas web a mi proyecto usando Selenium. Ya tengo un montón de pruebas que evalúan para un elemento específico usando:Selenio: encuentre el elemento "al lado" de otro elemento

final WebElement dateElement = web.findElement(By.id(elementId)); 

Y esto funciona bien. Ahora tengo otro requisito. Esto está en mi página generada:

<input type="text" id="dateElement" name="dateElement" value="bunch of monkeys" tabindex="101" placeholder="yyyy-mm-dd"> 
<span class="error">dateElement is an invalid date</span> 

¿Cómo puedo obtener el mensaje de error? Me gustaría algo que me permita solicitar el elemento span con la clase "error" que está justo después del elemento dateElement.

(Este mensaje de error fue generado por Spring MVC, por lo que no es fácil cambiarlo directamente. Posible, supongo, pero preferiría no hacerlo).

Cualquier idea alternativa es bienvenida.

Respuesta

19

Bien, ya encontré una solución usando Xpath y el siguiente hermano, no fue demasiado complicado.

final WebElement errorElement = web.findElement(By.xpath("//*[@id='" + elementId + "']/following-sibling::span[@class='error']")); 

Esto me da lo que quería, y lanza un NoSuchElementException cuando no está aquí, que es exactamente lo que quiero.

+0

grande, que necesitaba la respuesta también – CosminO

+0

Esto incluso se puede simplificar el uso de 'última WebElement errorElement = dateElement.findElement (By.xpath ("following-sibling :: [clase @ = 'error'] lapso")); 'si tiene el' WebElement dateElement' real disponible. Debe usar ese elemento como la raíz de la búsqueda, pero observe que la expresión xpath no debe comenzar con '//' (o '/') en ese caso, de lo contrario, buscará desde la raíz del documento de todos modos. – neXus

5
elementSelector = "input + span[class='error']"; 

final WebElement dateElement = web.findElement(By.cssSelector(elementSelector)); 
+0

¿Por qué no 'errorElement' en lugar de' dateElement'? ¿Y qué pasa si se trata de un error no relacionado con dateElement? – tishma

+1

@tishma porque eso era lo que OP usaba – CBRRacer

Cuestiones relacionadas