2013-12-17 5 views
9

Ho molti pulsanti di opzione sul mio schermo. Quando un pulsante radio è selezionato, ha un attributo di checked. Quando il pulsante di opzione non è selezionato, l'attributo verificato non è presente. Vorrei creare un metodo che passerebbe se l'elemento non è presente.Come verificare che un attributo sia presente in un elemento utilizzando Selenium WebDriver?

Utilizzo il selenio web e java. So che posso recuperare gli attributi usando getSingleElement(XXX).getAttribute(XXX). Non sono sicuro di come verificare che un attributo non esista e che il test passi quando non esiste (fallire se esiste).

Quando il pulsante di opzione è selezionata

<input id="ctl00_cphMainContent_ctl00_iq1_response_0" type="radio" name="ctl00$cphMainContent$ctl00$iq1$response" value="1" checked="checked"> 

Quando il pulsante di opzione non è selezionata

<input id="ctl00_cphMainContent_ctl00_iq1_response_0" type="radio" name="ctl00$cphMainContent$ctl00$iq1$response" value="1"> 

voglio la prova da superare quando l'attributo controllato non è presente

+0

Quando il pulsante di opzione è selezionata Quando il pulsante di opzione non è selezionata voglio il test da passare quando l'attributo verificato non è presente – TestRaptor

risposta

13

È possibile creare un metodo per gestirlo correttamente. Nota che questo è in stile misto C#/Java, è necessario modificare un po 'per compilare.

private boolean isAttribtuePresent(WebElement element, String attribute) { 
    Boolean result = false; 
    try { 
     String value = element.getAttribute(attribute); 
     if (value != null){ 
      result = true; 
     } 
    } catch (Exception e) {} 

    return result; 
} 

Come si usa:

WebElement input = driver.findElement(By.cssSelector("input[name*='response']")); 
Boolean checked = isAttribtuePresent(input, "checked"); 
// do your assertion here 
+0

Sì, il codice sopra riportato funziona bene per me. grazie Yi Zeng –

+0

perché hai provato provare a catturare. Sarà sollevata un'eccezione quando l'attributo non esce sull'elemento? –

+0

@PraveenRawat: È lo pseudo codice misto C#/Java creato 5 anni fa per fornire un'idea. Cambialo in modo appropriato a te. –

4

sguardo here :

getAttribute (nome java.lang.String)

Resi: Il valore corrente dell'attributo o null se il valore non è impostato.

Usare qualsiasi quadro che si sta utilizzando per affermare che il valore è nullo

Assert.IsNull (getSingleElement (XXX) .getAttribute ("controllato")) prova;

+0

Strano ... Mi sembra di ottenere un org.openqa.selenium.NoSuchElementException. –

2

Per affermare pulsante di opzione è selezionato

Assert.assertTrue(element.isSelected()); 

Per affermare pulsante di opzione non è selezionata

Assert.assertFalse(element.isSelected()); 

Per affermare un attributo è presente in elem ent

Assert.assertEquals(element.getAttribute(attributeName), expectedAttributeValue); 
1

Checkboxes può talvolta difficile, poiché l'attributo controllato potrebbe non essere seguita da un valore di attributo.

Se sei preoccupato solo con la presenza dell'attributo, un semplice controllo sarebbe simile a questa:

boolean hasAttr_css = driver.findElementsByCssSelector("#input_id[checked]").isEmpty(); 
0
try { 
if (webdriver.findElement(By.identificationMethod(value)).getAttribute(value) != null) { 
     passed = false; 
    } 
} catch (Exception e) { 
    passed = true; 
} 

era il tipo di soluzione che ho usato quando avevo bisogno di verificare la presenza di elementi , tuttavia, è necessario notare che gli errori NullPointer non sono stati rilevati dall'eccezione NoSuchElement.

3

Purtroppo la risposta accettata non è valida nel caso segnalato. Per alcuni motivi, per gli attributi non esistenti di Cr e FF viene restituita una stringa vuota anziché null. Problema legato: https://github.com/SeleniumHQ/selenium/issues/2525

+0

Ciao. Mi sto imbattendo in un problema con questo. C'è un modo per prendere quando l'attributo non esiste? Il mio codice ora assomiglia a 'if (altAttribute == null || altAttribute ==" "|| altAttribute ==" ")' E non sta recuperando qualunque cosa 'we.getAttribute (" alt ");' sta tornando. .. – dsidler