XPath in Selenium: Come trovare e scrivere? (Testo, Contiene e)
In cosa consiste XPath Selenium?
XPath in Selenium è un percorso XML utilizzato per la navigazione attraverso la struttura HTML della pagina. È una sintassi o un linguaggio per trovare qualsiasi elemento su una pagina Web utilizzando l'espressione del percorso XML. XPath può essere utilizzato sia per documenti HTML che XML per trovare la posizione di qualsiasi elemento su una pagina Web utilizzando la struttura DOM HTML.
In Selenium automazione, se gli elementi non vengono trovati dai localizzatori generali come id, classe, nome, ecc., allora XPath viene utilizzato per trovare un elemento sulla pagina web.
In questo tutorial impareremo a conoscere XPath e le diverse espressioni XPath per trovare elementi complessi o dinamici, i cui attributi cambiano dinamicamente durante l'aggiornamento o qualsiasi altra operazione.
Sintassi XPath
XPath contiene il percorso dell'elemento situato nella pagina web. La sintassi XPath standard per la creazione di XPath è.
Xpath=//tagname[@attribute='value']
Il formato base di XPath in selenio è spiegato di seguito con una schermata.
- //: Seleziona il nodo corrente.
- Nome etichetta: Nome tag del nodo particolare.
- @: Seleziona attributo.
- Attributo: Nome dell'attributo del nodo.
- Valore: Valore dell'attributo.
Per trovare con precisione l'elemento nelle pagine web esistono diversi tipi di localizzatore:
Localizzatori XPath | Trova diversi elementi sulla pagina web |
---|---|
ID | Per trovare l'elemento in base all'ID dell'elemento |
Nome della classe | Per trovare l'elemento in base al nome classe dell'elemento |
Nome | Per trovare l'elemento in base al nome dell'elemento |
Link al testo | Per trovare l'elemento in base al testo del collegamento |
XPath | XPath necessario per trovare l'elemento dinamico e attraversare i vari elementi della pagina web |
Percorso CSS | Il percorso CSS individua anche gli elementi che non hanno nome, classe o ID. |
Tipi di percorso X
Esistono due tipi di XPath:
1) XPath assoluto
2) XPath relativo
XPath assoluto
È il modo diretto per trovare l'elemento, ma lo svantaggio dell'XPath assoluto è che se vengono apportate modifiche al percorso dell'elemento, l'XPath fallisce.
La caratteristica chiave di XPath è che inizia con la singola barra (/), il che significa che puoi selezionare l'elemento dal nodo radice.
Di seguito è riportato l'esempio di un'espressione XPath assoluta dell'elemento mostrato nella schermata seguente.
NOTA: puoi esercitarti con il seguente esercizio XPath su questo http://demo.guru99.com/test/selenium-xpath.html
Clicchi qui se il video non è accessibile
XPath assoluto:
/html/body/div[2]/div[1]/div/h4[1]/b/html[1]/body[1]/div[2]/div[1]/div[1]/h4[1]/b[1]
Xpath relativo
Xpath relativo inizia dal centro della struttura HTML DOM. Inizia con una doppia barra (//). Può cercare elementi ovunque sulla pagina web, il che significa che non c'è bisogno di scrivere un lungo xpath e puoi iniziare dal centro della struttura HTML DOM. Xpath relativo è sempre preferito in quanto non è un percorso completo dall'elemento radice.
Di seguito è riportato l'esempio di un'espressione XPath relativa dello stesso elemento mostrato nella schermata seguente. Questo è il formato comune utilizzato per trovare l'elemento da XPath.
Clicchi qui se il video non è accessibile
Relative XPath: //div[@class='featured-box cloumnsize1']//h4[1]//b[1]
Cosa sono gli assi XPath.
Gli assi XPath ricercano nodi diversi nel documento XML dal nodo di contesto corrente. Gli assi XPath sono i metodi utilizzati per trovare elementi dinamici, che altrimenti non sarebbero possibili con il normale metodo XPath che non ha ID, Classname, Name, ecc.
I metodi degli assi vengono utilizzati per trovare quegli elementi che cambiano dinamicamente durante l'aggiornamento o qualsiasi altra operazione. Esistono pochi metodi degli assi comunemente utilizzati in Selenium Webdriver come figlio, genitore, antenato, fratello, precedente, sé, ecc.
Come scrivere XPath dinamico in Selenium webdriver
1) XPath di base
L'espressione XPath seleziona i nodi o l'elenco dei nodi sulla base di attributi come ID, Nome, Nome classe, ecc. dal documento XML come illustrato di seguito.
Xpath=//input[@name='uid']
Di seguito il link per accedere alla pagina http://demo.guru99.com/test/selenium-xpath.html
Alcune espressioni XPath più basilari:
Xpath=//input[@type='text'] Xpath=//label[@id='message23'] Xpath=//input[@value='RESET'] Xpath=//*[@class='barone'] Xpath=//a[@href='http://demo.guru99.com/'] Xpath=//img[@src='//guru99.com/images/home/java.png']
2) Contiene()
Contiene() è un metodo utilizzato nell'espressione XPath. Viene utilizzato quando il valore di qualsiasi attributo cambia dinamicamente, ad esempio, le informazioni di accesso.
La funzione di contenimento ha la capacità di trovare l'elemento con testo parziale come mostrato nell'esempio XPath di seguito.
In questo esempio, abbiamo provato a identificare l'elemento utilizzando semplicemente il valore testuale parziale dell'attributo. Nell'espressione XPath seguente viene utilizzato il valore parziale "sub" al posto del pulsante di invio. Si può osservare che l'elemento viene trovato con successo.
Il valore completo di "Tipo" è "invia" ma utilizza solo il valore parziale "sub".
Xpath=//*[contains(@type,'sub')]
Il valore completo di "name" è "btnLogin" ma utilizza solo il valore parziale "btn".
Xpath=//*[contains(@name,'btn')]
Nell'espressione precedente, abbiamo preso il "nome" come attributo e "btn" come valore parziale, come mostrato nello screenshot seguente. Verranno trovati 2 elementi (LOGIN e RESET) poiché il loro attributo 'nome' inizia con 'btn'.
Allo stesso modo, nell'espressione seguente, abbiamo preso "id" come attributo e "messaggio" come valore parziale. Verranno trovati 2 elementi ("L'ID utente non deve essere vuoto" e "La password non deve essere vuota") poiché il suo attributo "id" inizia con "messaggio".
Xpath=//*[contains(@id,'message')]
Nell'espressione seguente, abbiamo preso il "testo" del collegamento come attributo e "qui" come valore parziale, come mostrato nello screenshot seguente. Questo troverà il collegamento ("qui") poiché visualizza il testo "qui".
Xpath=//*[contains(text(),'here')]
Xpath=//*[contains(@href,'guru99.com')]
3) Utilizzando OR & AND
Nell'espressione OR vengono utilizzate due condizioni, a prescindere dal fatto che la prima condizione o la seconda condizione debbano essere vere. È applicabile anche se una qualsiasi condizione è vera o forse entrambe. Significa che qualsiasi condizione dovrebbe essere vera per trovare l'elemento.
Nell'espressione XPath seguente, identifica gli elementi le cui condizioni singole o entrambe sono vere.
Xpath=//*[@type='submit' or @name='btnReset']
Evidenziando entrambi gli elementi come elemento “LOGIN” con attributo 'tipo' e elemento “RESET” con attributo 'nome'.
Nell'espressione AND vengono utilizzate due condizioni, entrambe le condizioni devono essere vere per trovare l'elemento. Non riesce a trovare l'elemento se una qualsiasi condizione è falsa.
Xpath=//input[@type='submit' and @name='btnLogin']
Nell'espressione seguente, evidenziando l'elemento "LOGIN" poiché ha sia l'attributo "tipo" che "nome".
4) Xpath inizia con
XPath inizia con() è una funzione utilizzata per trovare l'elemento web il cui valore dell'attributo viene modificato durante l'aggiornamento o da altre operazioni dinamiche sulla pagina web. In questo metodo, il testo iniziale dell'attributo viene abbinato per trovare l'elemento il cui valore dell'attributo cambia dinamicamente. Puoi anche trovare elementi il cui valore dell'attributo è statico (non cambia).
Ad esempio: Supponiamo che l'ID di un particolare elemento cambi dinamicamente come:
ID="messaggio12"
ID="messaggio345"
ID="messaggio8769"
e così via... ma il testo iniziale è lo stesso. In questo caso, utilizziamo l'espressione Start-with.
Nell'espressione seguente, ci sono due elementi con un ID che inizia con "messaggio" (ad esempio, "L'ID utente non deve essere vuoto" e "La password non deve essere vuota"). Nell'esempio seguente, XPath trova gli elementi il cui "ID" inizia con "messaggio".
Xpath=//label[starts-with(@id,'message')]
5) Funzione XPath Text()
Il Funzione testo XPath() è una funzione integrata del webdriver selenium che viene utilizzata per individuare gli elementi in base al testo di un elemento web. Aiuta a trovare gli elementi di testo esatti e individua gli elementi all'interno dell'insieme di nodi di testo. Gli elementi da localizzare dovrebbero essere sotto forma di stringa.
In questa espressione, con funzione testo, troviamo l'elemento con corrispondenza esatta del testo come mostrato di seguito. Nel nostro caso troviamo l'elemento con il testo “UserID”.
Xpath=//td[text()='UserID']
Metodi degli assi XPath
Questi metodi di assi XPath sono usati per trovare gli elementi complessi o dinamici. Di seguito vedremo alcuni di questi metodi.
Per illustrare il metodo degli assi XPath, utilizzeremo il sito demo della banca Guru99.
1) Seguendo
Seleziona tutti gli elementi nel documento del nodo corrente ( ) [la casella di input UserID è il nodo corrente] come mostrato nella schermata sottostante.
Xpath=//*[@type='text']//following::input
Ci sono 3 nodi di "input" che corrispondono usando l'asse "following": password, login e pulsante di reset. Se vuoi concentrarti su un elemento in particolare, puoi usare il metodo XPath seguente:
Xpath=//*[@type='text']//following::input[1]
È possibile modificare l'XPath in base ai requisiti inserendo [1],[2]…………e così via.
Con l'input pari a '1', la schermata sottostante individua il nodo specifico che è l'elemento della casella di input 'Password'.
2) Antenato
L'asse antenati seleziona tutti gli elementi antenati (nonno, genitore, ecc.) del nodo corrente come mostrato nella schermata seguente.
Nell'espressione seguente, troviamo l'elemento antenati del nodo corrente (nodo "ENTERPRISE TESTING").
Xpath=//*[text()='Enterprise Testing']//ancestor::div
Esistono 13 nodi "div" corrispondenti utilizzando l'asse "antenato". Se vuoi concentrarti su un elemento particolare, puoi utilizzare XPath di seguito, dove modifichi il numero 1, 2 secondo le tue esigenze:
Xpath=//*[text()='Enterprise Testing']//ancestor::div[1]
È possibile modificare l'XPath in base ai requisiti inserendo [1], [2]…………e così via.
3) Bambino
Seleziona tutti gli elementi figli del nodo corrente (Java) come mostrato nella schermata seguente.
Xpath=//*[@id='java_technologies']//child::li
Ci sono 71 nodi "li" che corrispondono utilizzando l'asse "figlio". Se vuoi concentrarti su un elemento particolare, puoi utilizzare il seguente xpath:
Xpath=//*[@id='java_technologies']//child::li[1]
È possibile modificare xpath in base ai requisiti inserendo [1],[2]…………e così via.
4) Precedente
Seleziona tutti i nodi che precedono il nodo corrente come mostrato nella schermata seguente.
Nell'espressione seguente, identifica tutti gli elementi di input prima del pulsante "LOGIN". ID utente e password elemento di input.
Xpath=//*[@type='submit']//preceding::input
Sono presenti 2 nodi "input" che corrispondono utilizzando l'asse "precedente". Se vuoi concentrarti su un elemento particolare, puoi utilizzare il seguente XPath:
Xpath=//*[@type='submit']//preceding::input[1]
È possibile modificare xpath in base ai requisiti inserendo [1],[2]…………e così via.
5) Fratello-successivo
Seleziona i seguenti fratelli del nodo di contesto. I fratelli sono allo stesso livello del nodo corrente come mostrato nella schermata sottostante. Troverà l'elemento dopo il nodo corrente.
xpath=//*[@type='submit']//following-sibling::input
Un nodo di input corrispondente utilizzando l'asse "following-sibling".
6) Genitore
Seleziona il genitore del nodo corrente come mostrato nella schermata seguente.
Xpath=//*[@id='rt-feature']//parent::div
Esistono 65 nodi "div" corrispondenti utilizzando l'asse "genitore". Se vuoi concentrarti su un elemento particolare, puoi utilizzare il seguente XPath:
Xpath=//*[@id='rt-feature']//parent::div[1]
È possibile modificare l'XPath in base ai requisiti inserendo [1],[2]…………e così via.
7) Sé
Seleziona il nodo corrente o 'self' significa che indica il nodo stesso come mostrato nella schermata seguente.
Un nodo corrispondente utilizzando l'asse "self". Trova sempre un solo nodo poiché rappresenta l'elemento self.
Xpath =//*[@type='password']//self::input
8) Discendente
Seleziona i discendenti del nodo corrente come mostrato nella schermata seguente.
Nell'espressione seguente, identifica tutti gli elementi discendenti dell'elemento corrente (elemento frame 'Corpo principale surround') che significa sotto il nodo (nodo figlio, nodo nipote, ecc.).
Xpath=//*[@id='rt-feature']//descendant::a
Esistono 12 nodi "collegamento" che corrispondono utilizzando l'asse "discendente". Se vuoi concentrarti su un elemento particolare, puoi utilizzare il seguente XPath:
Xpath=//*[@id='rt-feature']//descendant::a[1]
È possibile modificare l'XPath in base ai requisiti inserendo [1],[2]…………e così via.
Sommario
XPath è necessario per trovare un elemento sulla pagina web per eseguire un'operazione su quel particolare elemento.
- Esistono due tipi di XPath al selenio:
- XPath assoluto
- XPath relativo
- Gli assi XPath sono i metodi utilizzati per trovare elementi dinamici, che altrimenti non sarebbe possibile trovare con il normale metodo XPath
- L'espressione XPath seleziona i nodi o l'elenco di nodi sulla base di attributi come ID, Nome, Nome classe, ecc. dal documento XML.
Controlla anche: - Selenium Tutorial per principianti: impara WebDriver in 7 giorni