XPath in Selenium: Esercitazione

XPath in Selenium

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.

Sintassi XPath
Formato di base di XPath
  • //: 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 https://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 assoluto
XPath assoluto

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]

XPath relativo
XPath relativo

Cosa sono gli assi XPath?

Gli assi XPath ricercano nodi diversi nel documento XML a partire dal nodo di contesto corrente. Gli assi XPath sono metodi utilizzati per trovare elementi dinamici, altrimenti non possibili con i normali metodi XPath privi di ID, nome di classe, nome, ecc. XPath in Selenium include diversi metodi, tra cui Contiene, AND, XPath assoluto e XPath relativo, per identificare e individuare elementi dinamici in base a vari attributi e condizioni.

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 https://demo.guru99.com/test/selenium-xpath.html

XPath di base
XPath di base

Alcune espressioni XPath piรน basilari:

Xpath=//input[@type='text']
Xpath=//label[@id='message23']
Xpath=//input[@value='RESET']
Xpath=//*[@class='barone']
Xpath=//a[@href='https://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'.

contiene()

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')]

contiene()

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')]

contiene()

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 'type' ed elemento "RESET" con attributo 'name'.

Utilizzando OR e AND

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".

Utilizzando OR e AND

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')]

XPath inizia con

5) Funzione XPath Text()

Migliori 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']

Funzione XPath Testo()

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 questo metodo degli assi XPath, useremo il GuruSito demo di 99 Bank.

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

A seguire

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'.

A seguire

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

Antenato

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

Bambini

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 and password elemento di input.

Xpath=//*[@type='submit']//preceding::input

Precedente

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

Fratello-che-segue

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

Genitore

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.

Auto

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

discendente

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.

DOMANDE FREQUENTI

XPath (XML Path Language) viene utilizzato per navigare tra elementi e attributi in un XML o documento HTML. Aiuta a identificare e recuperare nodi specifici, rendendolo essenziale nello scraping web.ping, elaborazione dati XML e strumenti di test automatizzati come Selenium per individuare gli elementi web.

Utilizza XPath quando devi individuare elementi web complessi o in continua evoluzione che non possono essere facilmente identificati utilizzando localizzatori piรน semplici come ID o nome di classe. รˆ ideale per navigare in strutture gerarchiche, selezionare nodi per attributi e gestire elementi senza identificatori univoci.

I localizzatori in XPath sono espressioni utilizzate per identificare gli elementi all'interno della struttura di un documento. Specificano i percorsi ai nodi utilizzando attributi, testo, gerarchia o posizione. Le strategie di localizzazione piรน comuni includono la selezione degli elementi in base al nome del tag, ai valori degli attributi, alle corrispondenze parziali o alle combinazioni logiche di condizioni.

XPath รจ di due tipi: XPath assoluto and XPath relativo.

  • XPath assoluto inizia dal nodo radice (ad esempio, /html/body/โ€ฆ) e fornisce il percorso completo.
  • XPath relativo inizia da qualsiasi nodo (ad esempio, //div[@id='content']) ed รจ piรน flessibile e gestibile.

Una singola barra (/) seleziona i nodi direttamente sotto la radice o il nodo corrente, rappresentando un percorso assoluto. Una doppia barra (//) cerca i nodi ovunque nel documento, indipendentemente dalla gerarchia, rendendo piรน flessibile la ricerca di elementi senza specificare il percorso completo.

Sรฌ, XPath รจ sensibile alle maiuscole/minuscole. I nomi degli elementi, i nomi degli attributi e i valori devono corrispondere esattamente a come appaiono nel documento. Ad esempio, //div e //DIV vengono trattati in modo diverso. Per gestire la distinzione tra maiuscole e minuscole, รจ possibile utilizzare funzioni come translate() nelle espressioni XPath.

Sintesi

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

Riassumi questo post con: