2011-11-18 3 views
54

Uso Selenium in Java per verificare il controllo di una casella di controllo in una webapp. Ecco il codice:Attributo casella di controllo selenio "controllato"

private boolean isChecked; 
private WebElement e; 

dichiaro e e assegnarlo alla zona dove la casella è.

isChecked = e.findElement(By.tagName("input")).getAttribute("checked").equals("true"); 

Che è strano è che i rendimenti getAttribute("checked")null e quindi un NullPointerException

Nel HTML per la casella di controllo, non c'è checked attributo visualizzato. Tuttavia, non è il caso che tutti gli elementi input abbiano uno checked = "true" quindi questo codice dovrebbe funzionare?

risposta

91

Se si utilizza Webdriver, l'elemento che si sta cercando è Selezionato.

Spesso il rendering della casella di controllo non applica effettivamente l'attributo verificato se non specificato.

Quindi, quello che si potrebbe cercare in selenio WebDriver è questo

isChecked = e.findElement(By.tagName("input")).Selected; 

Poiché non esiste un selezionato nella API WebDriver Java, il codice di cui sopra dovrebbe essere la seguente:

isChecked = e.findElement(By.tagName("input")).isSelected(); 
+0

Terrific! Non posso credere di non aver visto il metodo 'isSelected()' nell'API. Stavo essenzialmente cercando di scrivere il mio metodo per farlo quando esisteva già. Grazie. – jamesfzhang

0

Il meccanismo del quadro selenio:

Qui selenio fanno richiesta al suo server a prendere primo sottoelemento con ingresso nometag

WebElement e = e.findElement(By.tagName("input")); 

Che si tenta di ricevere attributo quell'elemento

object attribute = e.getAttribute("checked") 

Quindi utilizzare

findElement(By.attribute("checked") 

o utilizzare

findElement(By.xpath("\\input[@checked='true']") 

P.S. Non ho familiarità con l'equivalente di java di selenio api quindi alcuni metodi potrebbero essere chiamati leggermente diversi.

+0

Questo in realtà non affronta la questione. Sto provando a determinare se una casella di controllo è selezionata, quindi il valore booleano 'isSelected'. Non sto cercando di trovare una casella di controllo selezionata. Ad ogni modo, userò una soluzione aggirando 'isSelected' con' try' e 'catch' su' NullPointerException' – jamesfzhang

6
if(checkBox.getAttribute("checked") != null) // if Checked 
    checkBox.click();       //to Uncheck it 

Puoi anche aggiungere un'istruzione and per essere sicuro che l'opzione selezionata sia vera.

4

lo farei con CssSelector:

// for all checked checkboxes 
driver.findElements(By.cssSelector("input:checked[type='checkbox']")); 
// for all notchecked checkboxes 
driver.findElements(By.cssSelector("input:not(:checked)[type='checkbox']")); 

Forse questo aiuta anche ;-)

+0

Questo non risponde alla domanda. Non era la domanda come cercare una casella di controllo selezionata. La domanda era se qualsiasi casella di controllo è selezionata o meno. – Elmue

10
if (!driver.findElement(By.id("idOfTheElement")).isSelected()) 
{ 
    driver.findElement(By.id("idOfTheElement")).click(); 
} 
1

Per l'evento in cui ci sono più caselle di controllo da cui si desideri selezionare/deseleziona solo alcuni, il seguente lavoro con il driver Chrome (in qualche modo non riuscito per IE Driver):

NOTA: le mie check-box non avevano un ID associato, il che sarebbe il modo migliore per identificarle un secondo la documentazione.Nota il segno ! all'inizio della dichiarazione.

if(!driver.findElement(By.xpath("//input[@type='checkbox' and @name='<name>']")).isSelected()) 
{ 
    driver.findElement(By.xpath("//input[@type='checkbox' and @name= '<name>']")).click(); 
} 
0
  1. dichiarare una variabile.
  2. Memorizzare la proprietà selezionata per il pulsante di opzione.
  3. Avere una condizione if.

lascia supporre

private string isChecked; 
private webElement e; 
isChecked =e.findElement(By.tagName("input")).getAttribute("checked"); 
if(isChecked=="true") 
{ 

} 
else 
{ 

} 

Speranza questa risposta sarà di aiuto per voi. Fatemi sapere, se avete qualche chiarimento nel driver web CSharp Selenium.

0
public boolean getcheckboxvalue(String element) 
    { 
     WebElement webElement=driver.findElement(By.xpath(element)); 
     return webElement.isSelected(); 
    } 
+1

È una buona idea usare il metodo 'isSelected()'. Eppure il tuo codice non risponde direttamente alla domanda. Sarebbe bello se lo si modificasse per abbinare il codice nel post superiore o spiegare (in inglese) quali modifiche si consiglia. L'elemento –

+0

è l'xpath che invierai chiamando la funzione. il valore restituito sarà lo stato della casella di controllo. –