2011-11-23 12 views
15

Ho già provato ad usare la sintassi ">" ma il selenio non lo accetta, so che c'è un modo per farlo usando Xpath ma il nostro intero progetto è scritto usando selettori CSS.Come posso ottenere i bambini immediati di tutti gli elementi con selettori CSS utilizzando il selenio?

Sto tentando di memorizzare un elenco che conterrà tutti i figli immediati di un elemento ma non i loro figli (discendenti), quando uso la sintassi "*" ottengo tutti i discendenti dell'elemento.

+0

Vuoi dire che 'body> *' non ti dà tutti i discendenti diretti del tag body in Selenium? – jro

+0

Puoi dare un esempio del selettore CSS che stai usando. In Selenium RC abbiamo la maggior parte del nostro codice usando selettori CSS senza problemi quindi sarei sorpreso se in Selenium2 avessero fatto un passo indietro. – Skuld

+0

@jro, ho provato a utilizzare 'someWebElement.findElement (By.cssSelector ("> *"))' L'eccezione generata è: "invalidElementStateException". – Shiran

risposta

22

È necessario specificare un tag per iniziare da ... se si desidera "figli immediati di tutti gli elementi", si otterrebbero semplicemente tutti gli elementi, che in realtà non è ciò che si desidera.

Per ottenere "tutti i figli diretti di un elemento, ma non i loro figli" per body, utilizzano body > *.

Oppure un altro esempio, per ottenere tutti i discendenti diretti di <div id='question'>, utilizzare div#question > *.

+0

Grazie! è stato utile !!! Abbiamo provato ad usare il> * in relatività per webElement (come: 'someWebElement.findElements (By.cssSelector ("> * "))), invece di: webDriver.findElements (By.cssSelector (elementLocator +"> * ") .' – Shiran

+3

Ricorda che questo è un selettore estremamente inefficiente! I selettori Css sono convalidati da destra a sinistra, quindi usando l'asterisco (*, alias selettore universale) alla fine del selettore il browser selezionerà tutti gli elementi e quindi inizierà a filtrare ulteriormente (in questo caso: solo gli elementi che sono figli diretti dell'elemento 'body'). Quindi per le pagine piccole questo non sarebbe un problema, ma nelle applicazioni a singola pagina più grandi può rallentare le cose ... –

Problemi correlati