2011-11-04 20 views
12

Aggiungo test web al mio progetto utilizzando Selenium. Ho già un sacco di test che verificano un elemento specifico utilizzando:Selenio: trova elemento "accanto a" altro elemento

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

E questo funziona bene. Ora ho un altro requisito. Questo è nella mia pagina generata:

<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> 

Come posso ottenere il messaggio di errore? Mi piacerebbe qualcosa che mi permetta di richiedere l'elemento span con "errore" di classe che è subito dopo dateElement.

(Questo messaggio di errore è stato ganerated da Spring MVC, quindi non è facile cambiarlo direttamente possibile, suppongo, ma preferirei non).

Qualsiasi idea alternativa è la benvenuta.

risposta

19

OK, ho già trovato una soluzione utilizzando Xpath e successivo-fratello, non era troppo complicato.

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

Questo mi dà quello che volevo, e lancia un NoSuchElementException quando non è qui, che è esattamente quello che voglio.

+0

grande, mi serviva la risposta anche – CosminO

+0

Questo può anche essere semplificato utilizzando 'finale WebElement errorElement = dateElement.findElement (By.xpath ("dopo-sibling :: arco [@ class = 'error']")); 'se è disponibile l'effettivo' WebElement dateElement'. Devi usare quell'elemento come radice della ricerca ma notare che l'espressione xpath non dovrebbe iniziare con '//' (o '/') in quel caso, altrimenti cercherà comunque dalla radice del documento. – neXus

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

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

Perché non 'errorElement' invece di' dateElement'? E se si tratta di un errore non correlato a dataElement? – tishma

+1

@tishma perché era quello che OP utilizzato – CBRRacer

Problemi correlati