2009-10-15 12 views
26

Sto cercando di utilizzare SeleniumRC per testare la mia app GWT e sto cercando di abbinare gli elementi usando selettori CSS.Come posso contare il numero di elementi che corrispondono al mio selettore CSS?

Voglio contare il numero di pulsanti abilitati nel seguente codice HTML.

Un pulsante è abilitato se è sotto un <td> con class="x-panel-btn-td " e disabilitato se è in un <td> con class="x-panel-btn-td x-hide-offsets".

Quindi, in pratica, voglio recuperare il numero di pulsanti sotto tutti gli <td> s con la classe x-panel-btn-td.

<table cellspacing="0"> 
    <tbody> 
    <tr> 
     <td id="ext-gen3504" class="x-panel-btn-td "> 
      <em unselectable="on"> 
       <button id="ext-gen3506" class="x-btn-text" type="button">OK</button> 
      </em> 
     </td> 
     <td id="ext-gen3512" class="x-panel-btn-td x-hide-offsets"> 
      <em unselectable="on"> 
       <button id="ext-gen3506" class="x-btn-text" type="button">Yes</button> 
      </em> 
     </td> 
     <td id="ext-gen3520" class="x-panel-btn-td"> 
      <em unselectable="on"> 
       <button id="ext-gen3506" class="x-btn-text" type="button">No</button> 
      </em> 
     </td> 
     <td id="ext-gen3528" class="x-panel-btn-td x-hide-offsets"> 
      <em unselectable="on"> 
       <button id="ext-gen3506" class="x-btn-text" type="button">Cancel</button> 
      </em> 
     </td> 
    </tr> 
    </tbody> 
</table> 
+0

Cordiali saluti, si prega di scorrere verso il basso per vedere la mia risposta se siete alla ricerca per l'equivalente – gorbysbm

risposta

15

Per quanto ne so, non è possibile farlo utilizzando selettori CSS, ma esiste un comando in selenio per il conteggio tramite XPath. Il seguente comando verificherà ci sono due pulsanti disattivati:

verifyXpathCount | //td[contains(@class, 'x-hide-offsets')]//button | 2 

In Selenio RC (Java) questo sarebbe più simile

assertEquals(selenium.getXpathCount("//td[contains(@class, 'x-hide-offsets')]//button"), 2); 
+0

Accettare questo come risposta perché questo è più diretto nei termini del selenio. –

+0

Questo è ciò di cui ho bisogno, grazie! – huy

+1

Utile, ma il titolo originale chiedeva equivalenti CSS, non XPath. – David

2

Questo dovrebbe essere relativamente semplice. Puoi farlo in diversi modi, ma ti suggerisco di usare lo getEval(...) in DefaultSelenium.

scrivere alcuni JavaScript che:

  1. ottiene tutti gli elementi da ID: ext-gen3506
  2. itera attraverso tutti gli elementi e controlli per vedere se è abilitato
  3. se è abilitato, incrementa un conteggio
  4. "restituisce" il conteggio.

Generalmente, getEval(...) restituirà il valore dell'ultima istruzione che è stata eseguita ... in modo da fornire il conteggio.

+0

i pulsanti WebDriver andrei hanno lo stesso id ... (copio incollato tag pulsante tht e, quindi, lo stesso id visualizzato nello snippet di codice. mio male.) Dovrei ottenere tutti gli elementi del pulsante di tipo. –

1

Poiché selenio è parte Firefox e quest'ultimo sostiene Selettori API uno potrebbe semplificare conteggio partite di un localizzatore CSS utilizzando un test come questo:

verifyEval | window.document.querySelectorAll("your#css > selector.here").length | 4 

In questo conteggio esempio riscontrate essere 4, naturalmente.

+0

Funziona per altri browser come IE? Vorremmo idealmente una soluzione cross-browser. – David

+0

una cosa da notare su questo metodo, a differenza dei normali comandi dell'API Selenium RC, si omette "css =" come prefisso per il localizzatore. – David

+0

@David: vedere http://caniuse.com/#feat=queryselector – soletan

7

Con le versioni più recenti di Selenium, esiste una funzione GetCSSCount (localizzatore di stringhe). Solo pensato un aggiornamento a questa domanda sarebbe utile

+0

Qualcuno sa quali versioni di Selenium in particolare offrono questo? E in SElenium RC e WebDriver? Oppure solo WebDriver? – David

+0

Inoltre, ha dimenticato di chiedere in precedenza, quali versioni di Selenium in termini di JAR del server, associazioni di codice client e/o IDE. – David

10

Questo è adesso anche implementato (senza qualsiasi magia Javascript aggiuntiva necessaria) in Selenium Webdriver API Poiché google si collega ancora a questa domanda come risultato principale, anche se Selenium RC è stato sostituito da Webdriver, si spera che ciò consenta di risparmiare tempo a qualcuno.

esempio di codice Java:

int locatorElementSize = driver.findElements(By.cssSelector("yourCSSLocator")).size(); 
Problemi correlati