2011-11-23 8 views
21

Sono molto nuovo al Selenium, quindi mi scuso se si tratta di una domanda stupida. Ho cablato con successo IntelliJ (Play! Framework) con Selenium e ho creato alcuni test usando firefoxDrivers.Come verificare se dom ha una classe utilizzando WebDriver (Selenium 2)?

Sto cercando di verificare se la pagina è stata correttamente convalidata.

lunga storia breve, sto selezionando un elemento come questo:

WebElement smallDecel = firefoxDriver.findElement(By.cssSelector("#configTable tr:nth-child(2) td .playerDecelInput")); 

faccio alcune ulteriori operazioni (chiara e cambiare il valore, inviare il 'modulo'), e poi voglio verificare se al TD in cui è inserito l'input è stata assegnata un'altra classe.

Quindi, la domanda è: esiste una tecnica semplice che possa essere utilizzata per scoprire se un WebElement/DOM ha una classe specificata?

risposta

8

È possibile utilizzare FindElement(By.ClassName(//name of your class)); Si consiglia di eseguire il ciclo di ricerca e la ricerca nel DOM per un determinato periodo di tempo o impostare un Thread.sleep (xxxx) e quindi cercare la classe aggiunta.

+0

selenio può prendersi cura di attesa per la elemento per avere il nome della classe. Vedi [Selenium Explicit Wait docs] (http://seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-waits) –

+0

+1 per il commento di @ Julian. Inoltre, la domanda riguarda il controllo della classe di un elemento che ha già trovato. La tua soluzione potrebbe trovare elementi diversi con la stessa classe e non necessariamente l'elemento che hai già trovato. –

25

Una volta trovato l'elemento, è sufficiente chiamare myElement.GetAttribute ("classe"). Quindi puoi analizzare la stringa che viene restituita e vedere se contiene o non contiene il nome della classe che ti interessa.

27

Per espandere sulla risposta Sam Woods', io uso un metodo semplice estensione (questo è per C#) per verificare se un elemento ha una classe specificata:

public static bool HasClass(this IWebElement el, string className) { 
    return el.GetAttribute("class").Split(' ').Contains(className); 
} 
+0

solo una veloce modifica, dovrebbe essere '.split ('')' e non '.Split ('')' – avk

+3

la sua risposta è corretta, è .Split ('') perché questo è C#, anche tenere conto che è necessario includere System.Linq nelle direttive di utilizzo per far funzionare i .Contains. – euther

Problemi correlati