xpath axes dynamic xpath selenium webdriver
Questo tutorial spiega gli assi XPath per XPath dinamico in Selenium WebDriver con l'aiuto di vari assi XPath utilizzati, esempi e spiegazione della struttura:
Nel tutorial precedente, abbiamo imparato a conoscere le funzioni XPath e la sua importanza nell'identificazione dell'elemento. Tuttavia, quando più di un elemento ha un orientamento e una nomenclatura troppo simili, diventa impossibile identificare l'elemento in modo univoco.
=> Dai un'occhiata alla guida all'addestramento del selenio perfetto qui.
Cosa imparerai:
Comprensione degli assi XPath
Cerchiamo di capire lo scenario sopra menzionato con l'aiuto di un esempio.
Pensa a uno scenario in cui vengono utilizzati due collegamenti con testo 'Modifica'. In questi casi, diventa pertinente comprendere la struttura nodale dell'HTML.
Si prega di copiare e incollare il codice seguente nel blocco note e salvarlo come file .htm.
Edit Edit
L'interfaccia utente sarà simile alla schermata seguente:
Dichiarazione problema
come trovare xpath in chrome per il selenio
D # 1) Cosa fare quando anche le funzioni XPath non riescono a identificare l'elemento?
Risposta: In tal caso, utilizziamo gli assi XPath insieme alle funzioni XPath.
La seconda parte di questo articolo tratta di come possiamo utilizzare il formato HTML gerarchico per identificare l'elemento. Inizieremo ottenendo alcune informazioni sugli assi XPath.
D # 2) Cosa sono gli assi XPath?
Risposta: Un asse XPath definisce il set di nodi relativo al nodo corrente (contesto). Viene utilizzato per individuare il nodo relativo al nodo su quell'albero.
D # 3) Che cos'è un nodo di contesto?
Risposta: Un nodo di contesto può essere definito come il nodo che il processore XPath sta attualmente esaminando.
Diversi XPath Axes utilizzati nei test sul selenio
Ci sono tredici diversi assi elencati di seguito. Tuttavia, non li useremo tutti durante il test del selenio.
- antenato : Questo asse indica tutti gli antenati relativi al nodo di contesto, arrivando anche al nodo radice.
- antenato-o-sé: Questo indica il nodo di contesto e tutti gli antenati relativi al nodo di contesto e include il nodo radice.
- attributo: Indica gli attributi del nodo di contesto. Può essere rappresentato con il simbolo '@'.
- bambino: Ciò indica i figli del nodo di contesto.
- verso il basso: Ciò indica i figli, i nipoti e i loro figli (se presenti) del nodo di contesto. Questo NON indica l'attributo e lo spazio dei nomi.
- discendente-o-sé: Indica il nodo del contesto e i figli, i nipoti e i loro figli (se presenti) del nodo del contesto. Questo NON indica l'attributo e lo spazio dei nomi.
- a seguire: Questo indica tutti i nodi che appaiono dopo il nodo di contesto nella struttura HTML DOM. Questo NON indica discendente, attributo e spazio dei nomi.
- fratello seguente: Questo indica tutti i nodi di pari livello (stesso genitore del nodo di contesto) che apparire dopo il nodo di contesto nella struttura HTML DOM. Questo NON indica discendente, attributo e spazio dei nomi.
- spazio dei nomi: Indica tutti i nodi dello spazio dei nomi del nodo di contesto.
- genitore: Ciò indica il genitore del nodo di contesto.
- precedente: Questo indica tutti i nodi che appaiono prima il nodo di contesto nella struttura HTML DOM. Questo NON indica discendente, attributo e spazio dei nomi.
- fratello precedente: Questo indica tutti i nodi di pari livello (stesso genitore del nodo di contesto) che appaiono prima il nodo di contesto nella struttura HTML DOM. Questo NON indica discendente, attributo e spazio dei nomi.
- se stesso: Questo indica il nodo del contesto.
Struttura degli assi XPath
Considera la gerarchia seguente per capire come funzionano gli assi XPath.
Fare riferimento di seguito a un semplice codice HTML per l'esempio precedente. Si prega di copiare e incollare il codice seguente nell'editor del blocco note e salvarlo come file .html.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
La pagina apparirà come sotto. La nostra missione è utilizzare gli XPath Axes per trovare gli elementi in modo univoco. Proviamo a identificare gli elementi contrassegnati nel grafico sopra. Il nodo del contesto è 'Mammifero'
# 1) Antenato
Diario: Per identificare l'elemento predecessore dal nodo del contesto.
XPath # 1: // div (@ class = ’Mammal’) / ancestor :: div
L'XPath '// div (@ class =’ Mammal ’) / ancestor :: div' genera due nodi corrispondenti:
- Vertebrato, poiché è il genitore del 'Mammifero', quindi è considerato anche l'antenato.
- Animale in quanto genitore del genitore di 'Mammifero', quindi è considerato un antenato.
Ora, dobbiamo solo identificare un elemento che è la classe 'Animale'. Possiamo usare XPath come indicato di seguito.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
Se vuoi raggiungere il testo 'Animale', puoi usare XPath sotto.
# 2) Antenato o sé
Diario: Per identificare il nodo di contesto e l'elemento predecessore dal nodo di contesto.
XPath # 1: // div (@ class = ’Mammal’) / ancestor-or-self :: div
Il precedente XPath # 1 genera tre nodi corrispondenti:
- Animale (antenato)
- Vertebrato
- Mammifero (Sé)
# 3) Bambino
Diario: Per identificare il nodo figlio del contesto 'Mammifero'.
XPath # 1: // div (@ class = ’Mammal’) / child :: div
XPath # 1 aiuta a identificare tutti i figli del nodo di contesto 'Mammifero'. Se vuoi ottenere l'elemento figlio specifico, usa XPath # 2.
XPath # 2: // div (@ class = ’Mammal’) / child :: div (@ class = ’Herbivore’) / h5
# 4) Discendente
Diario: Per identificare i figli e i nipoti del nodo del contesto (ad esempio: 'Animale').
XPath # 1: // div (@ class = ’Animal’) / descendant :: div
Poiché Animal è il membro più alto della gerarchia, tutti gli elementi figlio e discendente vengono evidenziati. Possiamo anche cambiare il nodo di contesto per il nostro riferimento e utilizzare qualsiasi elemento che vogliamo come nodo.
# 5) Discendente o sé
Diario: Per trovare l'elemento stesso e i suoi discendenti.
XPath1: // div (@ class = ’Animal’) / descendant-or-self :: div
L'unica differenza tra discendente e discendente-o-sé è che si evidenzia oltre a evidenziare i discendenti.
# 6) Seguendo
Diario: Per trovare tutti i nodi che seguono il nodo di contesto. Qui, il nodo del contesto è il div che contiene l'elemento Mammal.
XPath: // div (@ class = ’Mammal’) / following :: div
Negli assi seguenti, vengono evidenziati tutti i nodi che seguono il nodo del contesto, sia esso figlio o discendente.
# 7) Fratello seguente
Diario: Per trovare tutti i nodi dopo il nodo di contesto che condividono lo stesso genitore e sono fratelli del nodo di contesto.
XPath: // div (@ class = ’Mammal’) / following-sibling :: div
La principale differenza tra il fratello seguente e il fratello successivo è che il fratello seguente prende tutti i nodi del fratello dopo il contesto ma condividerà anche lo stesso genitore.
# 8) Precedente
come scrivere un test case
Diario: Prende tutti i nodi che vengono prima del nodo di contesto. Potrebbe essere il nodo genitore o nonno.
Qui il nodo di contesto è Invertebrato e le linee evidenziate nell'immagine sopra sono tutti i nodi che vengono prima del nodo Invertebrato.
# 9) Fratello precedente
Diario: Per trovare il fratello che condivide lo stesso genitore del nodo di contesto e che viene prima del nodo di contesto.
Poiché il nodo del contesto è l'Invertebrato, l'unico elemento che viene evidenziato è il Vertebrato poiché questi due sono fratelli e condividono lo stesso genitore 'Animale'.
# 10) Genitore
Diario: Per trovare l'elemento genitore del nodo di contesto. Se il nodo di contesto stesso è un antenato, non avrà un nodo padre e non recupererà nodi corrispondenti.
Nodo di contesto n. 1: Mammifero
XPath: // div (@ class = ’Mammal’) / parent :: div
Poiché il nodo del contesto è Mammifero, l'elemento con Vertebrato viene evidenziato in quanto è il genitore del Mammifero.
Nodo di contesto n. 2: Animale
XPath: // div (@ class = ’Animal’) / parent :: div
Poiché il nodo animale stesso è l'antenato, non evidenzierà alcun nodo e quindi non sono stati trovati nodi corrispondenti.
# 11) Sé
Diario: Per trovare il nodo del contesto, viene utilizzato il sé.
Nodo di contesto: Mammifero
XPath: // div (@ class = ’Mammal’) / self :: div
Come possiamo vedere sopra, l'oggetto Mammifero è stato identificato in modo univoco. Possiamo anche selezionare il testo 'Mammifero utilizzando il seguente XPath.
XPath: // div (@ class = ’Mammal’) / self :: div / h4
Usi degli assi precedenti e successivi
Supponiamo che tu sappia che il tuo elemento di destinazione è il numero di tag avanti o indietro dal nodo del contesto, puoi evidenziare direttamente quell'elemento e non tutti gli elementi.
Esempio: precedente (con indice)
Supponiamo che il nostro nodo di contesto sia 'Altro' e desideriamo raggiungere l'elemento 'Mammifero', utilizzeremo l'approccio seguente per farlo.
Primo passo: Usa semplicemente preceding senza fornire alcun valore di indice.
XPath: // div (@ class = ’Other’) / preceding :: div
Questo ci dà 6 nodi corrispondenti e vogliamo solo un nodo mirato 'Mammifero'.
Secondo passo: Assegna il valore di indice (5) all'elemento div (contando verso l'alto dal nodo del contesto).
XPath: // div (@ class = ’Other’) / preceding :: div (5)
In questo modo l'elemento “Mammifero” è stato identificato con successo.
Esempio: seguente (con indice)
Supponiamo che il nostro nodo di contesto sia 'Mammifero' e desideriamo raggiungere l'elemento 'Crostaceo', utilizzeremo l'approccio seguente per farlo.
Primo passo: Utilizzare semplicemente quanto segue senza fornire alcun valore di indice.
XPath: // div (@ class = ’Mammal’) / following :: div
Questo ci dà 4 nodi corrispondenti e vogliamo solo un nodo target 'Crostaceo'
Secondo passo: Assegna il valore di indice (4) all'elemento div (conta in anticipo dal nodo del contesto).
XPath: // div (@ class = ’Other’) / following :: div (4)
In questo modo l'elemento “Crostaceo” è stato identificato con successo.
Lo scenario precedente può anche essere ricreato con fratello precedente e fratello successivo applicando l'approccio di cui sopra.
Conclusione
L'identificazione degli oggetti è il passo più cruciale nell'automazione di qualsiasi sito web. Se riesci ad acquisire la capacità di apprendere accuratamente l'oggetto, il 50% della tua automazione è fatto. Sebbene siano disponibili localizzatori per identificare l'elemento, ci sono alcuni casi in cui anche i localizzatori non riescono a identificare l'oggetto. In questi casi, dobbiamo applicare approcci diversi.
Qui abbiamo utilizzato le funzioni XPath e gli assi XPath per identificare in modo univoco l'elemento.
Concludiamo questo articolo annotando alcuni punti da ricordare:
- Non dovresti applicare gli assi 'antenato' al nodo di contesto del nodo di contesto stesso che è l'antenato.
- Non dovresti applicare gli assi 'padre' sul nodo del contesto del nodo del contesto stesso è l'antenato.
- Non dovresti applicare assi 'figlio' al nodo di contesto del nodo di contesto stesso che è il discendente.
- Non dovresti applicare gli assi 'discendenti' sul nodo del contesto del nodo del contesto stesso che è l'antenato.
- Non dovresti applicare gli assi 'seguenti' al nodo di contesto, è l'ultimo nodo nella struttura del documento HTML.
- Non dovresti applicare gli assi 'precedenti' al nodo di contesto, è il primo nodo nella struttura del documento HTML.
Buon apprendimento !!!
=> Visita qui per l'esclusiva serie di tutorial sull'addestramento al selenio.
Lettura consigliata
- Funzioni XPath per XPath dinamico in selenio
- Esercitazione sul selenio di cetriolo: integrazione del driver Web di selenio Java di cetriolo
- Localizzatori di selenio: identificare gli elementi web utilizzando XPath in selenio (esempi)
- Introduzione a Selenium WebDriver - Selenium Tutorial # 8
- Tutorial ChromeDriver Selenium: test Webdriver Selenium su Chrome
- Implementazione del nostro primo script WebDriver - Selenium WebDriver Tutorial # 10
- 30+ Migliori tutorial sul selenio: impara il selenio con esempi reali
- Gestione di tabelle Web, frame ed elementi dinamici in Selenium Script - Selenium Tutorial # 18