2013-02-08 10 views
5

Sto solo cominciando con selenio e ora hanno bisogno per selezionare questo elemento:Come posso selezionare questo elemento span?

<span class=" close">Matrices</span> 

Questa riga di codice restituisce zero elementi, quindi credo che non è quella giusta :-)

ReadOnlyCollection<IWebElement> matrixLink = driver.FindElements(By.PartialLinkText("Matrices")); 

Ma non sono riuscito a trovare un altro adatto, oltre all'Xpath, ma sembra proprio questo (//*[@id=\"Navigation\"]/div[2]/div[2]/ul/li[7]/span), e mi sembra un po 'fragile?

MODIFICA: l'intervallo ha la classe 'chiusa'. Fa parte di un menù, dove ci sono 19 lasso di con la classe 'stretta' quindi non è un selettore unico purtroppo ....

+0

quindi la span ha una classe vuota? –

+0

Ah, bene, NON ha, non ha solo classe quando cliccato su di esso, modifico la domanda. Tuttavia, è una voce di menu e l'ho controllato: ho 19 span (voci di menu) con la classe 'close' e l'elemento cliccato ha la classe 'close' rimossa da essa. – Michel

+0

'/ * [@ id = \" Navigazione \ "]/descendant :: span [text() = 'Matrici']' funziona? – Arran

risposta

8

Ciò funzionerà:

//*[@id=\"Navigation\"]/descendant::span[text()='Matrices'] 

Si noti che se si può, essere specifici nelle query XPath, principalmente a la leggibilità degli aiuti e il miglioramento delle prestazioni ... che è il * nella tua query interrogherà tutti gli elementi nella pagina. Non so che tipo di elemento del elemento navigazione è, ma si dovrebbe mettere il suo tipo elemento esatto, per esempio se si tratta di un div, ne fanno:

//div[@id=\"Navigation\"]/descendant::span[text()='Matrices'] 

Una leggera spiegazione per questo XPath è che afferrerà l'elemento Navigation e guarderà semplicemente ovunque all'interno di esso per trovare un elemento span con il testo di Matrices. Senza il bit descendant in XPath, cercherebbe solo i bambini diretti . Ciò significa che un figlio di Navigation, nient'altro - quindi se un elemento è un figlio di TestDiv, che è un figlio di Navigation, descendant lo prenderebbe, senza di esso non restituirai alcun risultato.

Per quanto riguarda il motivo per cui By.PartialLinkText non funziona, questo cercherebbe solo i collegamenti di ancoraggio. È normale, come hai visto, che i link di ancoraggio abbiano un elemento span al loro interno o qualche volta sia solo un span a parte.

By.PartialLinkText e allo stesso modo By.LinkText non "vedono" questo elemento, poiché non è un elemento di ancoraggio.

2

mio risolutore di problemi preferito per questi casi:

  • Installare Selenium IDE
  • , clicca sul link è necessario
  • nella "target" in Selenio IDE si vedrà diverse possibilità XPath

Ma vorrei usare il approccio, che il suo elemento di N-esimo con "stretta" di classe (//span[7] o qualcosa di simile)

+1

Sì, il xpath con il settimo elemento funziona, ma sembra così fragile, quando il menu ottiene un oggetto in più non è più il settimo elemento ... – Michel

+0

Concordato. Nei miei casi funziona perfettamente, perché i cambiamenti nella GUI Web non sono così spesso né così invasivi –

2

Puoi usare // span [text() = 'Matrici'] Seleziona il tuo elemento.

Problemi correlati