xpath axes dynamic xpath selenium webdriver
Aquest tutorial explica els eixos XPath per XPath dinàmic a Selenium WebDriver Amb l'ajut de diversos eixos XPath utilitzats, exemples i explicació de l'estructura:
En el tutorial anterior, hem après sobre les funcions XPath i la seva importància per identificar l'element. Tanmateix, quan més d’un element té una orientació i una nomenclatura massa similars, es fa impossible identificar l’element de manera única.
=> Consulteu la guia d’entrenament del seleni perfecte aquí.
Què aprendreu:
Conèixer els eixos XPath
Comprenguem l’escenari esmentat anteriorment amb l’ajut d’un exemple.
Penseu en un escenari en què s'utilitzen dos enllaços amb text 'Edita'. En aquests casos, es fa pertinent entendre l'estructura nodal de l'HTML.
Si us plau, copieu-enganxeu el codi següent al bloc de notes i deseu-lo com a fitxer .htm.
Edit Edit
La interfície d’usuari tindrà l’aspecte de la pantalla següent:
Plantejament del problema
P # 1) Què cal fer quan fins i tot les funcions XPath no aconsegueixen identificar l'element?
Resposta: En aquest cas, fem servir els eixos XPath juntament amb les funcions XPath.
La segona part d’aquest article tracta de com podem utilitzar el format HTML jeràrquic per identificar l’element. Començarem per obtenir una mica d’informació sobre els eixos XPath.
Q # 2) Què són els eixos XPath?
Resposta: Un eix XPath defineix el conjunt de nodes en relació amb el node actual (context). S'utilitza per localitzar el node relatiu al node d'aquest arbre.
P # 3) Què és un node contextual?
Resposta: Un node contextual es pot definir com el node que el processador XPath està mirant actualment.
Diferents eixos XPath utilitzats en proves de seleni
Hi ha tretze eixos diferents que s’enumeren a continuació. Tot i això, no les utilitzarem totes durant les proves de seleni.
- avantpassat : Aquest eix indica tots els avantpassats relatius al node contextual, arribant també fins al node arrel.
- avantpassat o jo: Aquest indica el node contextual i tots els avantpassats relatius al node contextual, i inclou el node arrel.
- atribut: Això indica els atributs del node context. Es pot representar amb el símbol '@'.
- nen: Això indica els fills del node context.
- cap avall: Això indica els fills i néts i els seus fills (si n’hi ha) del node contextual. Això NO indica l'atribut i l'espai de noms.
- descendent o jo: Això indica el node contextual i els fills i els néts i els seus fills (si n’hi ha) del node contextual. Això NO indica l'atribut i l'espai de noms.
- següents: Això indica tots els nodes que apareixen després el node context de l’estructura DOM HTML. Això NO indica descendència, atribut i espai de noms.
- germà següent: Aquest indica tots els nodes germans (el mateix pare que el node context) que apareixen després del node contextual de l’estructura DOM HTML. Això NO indica descendència, atribut i espai de noms.
- espai de noms: Això indica tots els nodes d’espai de noms del node context.
- pare: Això indica el pare del node context.
- precedents: Això indica tots els nodes que apareixen abans el node context de l’estructura DOM HTML. Això NO indica descendència, atribut i espai de noms.
- germà precedent: Aquest indica tots els nodes germans (el mateix pare que el node contextual) que apareixen abans el node context de l’estructura DOM HTML. Això NO indica descendència, atribut i espai de noms.
- jo: Aquest indica el node contextual.
Estructura dels eixos XPath
Tingueu en compte la jerarquia següent per entendre com funcionen els eixos XPath.
Consulteu a continuació un codi HTML senzill per a l'exemple anterior. Si us plau, copieu-enganxeu el codi següent a l’editor del bloc de notes i deseu-lo com a fitxer .html.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
La pàgina tindrà l'aspecte següent. La nostra missió és fer ús dels eixos XPath per trobar els elements de manera única. Intentem identificar els elements que estan marcats al gràfic anterior. El node context és 'Mamífer'
# 1) Ancestre
Agenda: Per identificar l'element ancestral del node contextual.
XPath núm. 1: // div [@ class = ’Mammal’] / ancestor :: div
XPath '// div [@ class = 'Mammal'] / ancestor :: div' llança dos nodes coincidents:
- Vertebrat, ja que és el pare de “Mamífer”, per tant, també es considera l’avantpassat.
- Animal com a pare dels pares de 'Mamífer', per tant, es considera un avantpassat.
Ara només necessitem identificar un element que sigui la classe 'Animal'. Podem utilitzar XPath tal com s’esmenta a continuació.
XPath#2: //div[@class='Mammal']/ancestor::div[@class='Animal']
Si voleu arribar al text 'Animal', es pot utilitzar a sota XPath.
# 2) Ancestre o jo
Agenda: Per identificar el node context i l'element ancestral del node context.
XPath núm. 1: // div [@ class = 'Mammal'] / ancestor-or-self :: div
L'XPath # 1 anterior llança tres nodes coincidents:
- Animal (Ancestor)
- Vertebrat
- Mamífer (jo)
# 3) Nen
Agenda: Per identificar el fill del node contextual 'Mamífer'.
XPath núm. 1: // div [@ class = 'Mammal'] / child :: div
XPath núm. 1 ajuda a identificar tots els fills del node contextual 'Mamífer'. Si voleu obtenir l’element fill específic, utilitzeu XPath # 2.
XPath núm. 2: // div [@ class = 'Mammal'] / child :: div [@ class = 'Herbivore'] / h5
# 4) Descendent
Agenda: Per identificar els fills i néts del node contextual (per exemple: 'Animal').
XPath núm. 1: // div [@ class = ’Animal’] / descendent :: div
Com que Animal és el membre més important de la jerarquia, es ressalten tots els elements fills i descendents. També podem canviar el node context per a la nostra referència i utilitzar qualsevol element que vulguem com a node.
# 5) Descendent o jo
Agenda: Per trobar l’element en si i els seus descendents.
XPath1: // div [@ class = ’Animal’] / descendent-or-self :: div
L'única diferència entre descendent i descendent o jo és que es destaca a més de ressaltar els descendents.
# 6) Seguint
Agenda: Per trobar tots els nodes que segueixen el node contextual. Aquí, el node context és el div que conté l'element Mammal.
XPath: // div [@ class = ’Mammal’] / following :: div
En els eixos següents, es ressalten tots els nodes que segueixen el node contextual, ja sigui el fill o el descendent.
# 7) Germà següent
Agenda: Per trobar tots els nodes després del node context que comparteixen el mateix pare i són germans del node context.
XPath: // div [@ class = 'Mammal'] / following-sibling :: div
La principal diferència entre el germà següent i el següent és que el germà següent pren tots els nodes germans després del context, però també compartirà el mateix pare.
# 8) Precedent
Agenda: Es necessiten tots els nodes anteriors al node context. Pot ser el node pare o avi.
Aquí el node de context és invertebrat i les línies ressaltades a la imatge anterior són tots els nodes anteriors al node invertebrat.
# 9) Germà anterior
Agenda: Per trobar el germà que comparteixi el mateix pare que el node context i que aparegui abans que el node context.
Com que el node contextual és l’invertebrat, l’únic element que es destaca és el vertebrat, ja que aquests dos són germans i comparteixen el mateix pare Animal.
# 10) Pares
Agenda: Per trobar l'element pare del node context. Si el propi node contextual és un avantpassat, no tindrà un node pare i no obtindria cap node coincident.
Node contextual # 1: mamífer
XPath: // div [@ class = 'Mammal'] / parent :: div
Com que el node contextual és Mammal, l'element amb Vertebrat es posa de relleu ja que és el pare del Mammal.
Context Node # 2: Animal
XPath: // div [@ class = ’Animal’] / parent :: div
Com que el propi node animal és l'avantpassat, no ressaltarà cap node i, per tant, no es va trobar cap node coincident.
# 11) Jo
Agenda: Per trobar el node contextual, s’utilitza el jo.
Node de context: Mamífer
XPath: // div [@ class = 'Mammal'] / self :: div
Com podem veure més amunt, l'objecte Mamífer s'ha identificat de manera única. També podem seleccionar el text 'Mamífer' mitjançant el següent XPath.
XPath: // div [@ class = 'Mammal'] / self :: div / h4
Usos dels eixos anteriors i posteriors
Suposem que sabeu que l'element objectiu és el nombre d'etiquetes que hi ha al davant o enrere del node contextual, podeu ressaltar directament aquest element i no tots els elements.
Exemple: anterior (amb índex)
Suposem que el nostre node contextual és 'Altres' i volem arribar a l'element 'Mamífer'; utilitzaríem l'enfocament següent per fer-ho.
Primer pas: Simplement utilitzeu precedents sense donar cap valor d'índex.
XPath: // div [@ class = ’Altres’] / precedents :: div
Això ens proporciona 6 nodes coincidents i només volem un node específic 'Mamífer'.
Segon pas: Doneu el valor d'índex [5] a l'element div (comptant cap amunt des del node context).
XPath: // div [@ class = 'Altres'] / precedents :: div [5]
D'aquesta manera, l'element 'Mamífer' s'ha identificat amb èxit.
Exemple: següent (amb índex)
Suposem que el nostre node contextual és 'Mamífer' i volem arribar a l'element 'Crustaci', utilitzarem l'enfocament següent per fer-ho.
Primer pas: Simplement utilitzeu el següent sense donar cap valor d’índex.
XPath: // div [@ class = ’Mammal’] / following :: div
Això ens proporciona 4 nodes coincidents i només volem un node específic 'Crustaci'
Segon pas: Doneu el valor de l'índex [4] a l'element div (compteu per davant del node context).
com utilitzar arrays.sort a Java
XPath: // div [@ class = 'Other'] / following :: div [4]
D'aquesta manera, l'element 'Crustaci' s'ha identificat amb èxit.
L'escenari anterior també es pot tornar a crear amb germà precedent i germà següent aplicant l'enfocament anterior.
Conclusió
La identificació d'objectes és el pas més crucial en l'automatització de qualsevol lloc web. Si podeu adquirir l'habilitat per aprendre l'objecte amb precisió, es realitzarà el 50% de l'automatització. Tot i que hi ha localitzadors disponibles per identificar l’element, hi ha alguns casos en què fins i tot els identificadors no aconsegueixen identificar l’objecte. En aquests casos, hem d’aplicar diferents enfocaments.
Aquí hem utilitzat les funcions XPath i els eixos XPath per identificar de forma única l'element.
Concloem aquest article assenyalant alguns punts per recordar:
- No heu d'aplicar eixos 'avantpassats' al node context del propi node context.
- No heu d'aplicar eixos 'pares' al node context del propi node context que és l'avantpassat.
- No heu d'aplicar eixos 'secundaris' al node contextual del mateix node context que sigui el descendent.
- No heu d'aplicar eixos 'descendents' al node context del propi node context que és l'avantpassat.
- No heu d'aplicar eixos 'següents' al node contextual que és l'últim node de l'estructura del document HTML.
- No heu d'aplicar eixos 'anteriors' al node contextual, ja que és el primer node de l'estructura del document HTML.
Feliç aprenentatge !!!
=> Visiteu aquí la selecció exclusiva de formació de Selenium.
Lectura recomanada
- Funcions XPath per XPath dinàmic al seleni
- Tutorial de Cogombre Selenium: Integració de Cogombre Java Selenium WebDriver
- Localitzadors de seleni: identificar elements web mitjançant XPath a seleni (exemples)
- Introducció a Selenium WebDriver - Tutorial Selenium # 8
- Tutorial de ChromeDriver Selenium: proves de Selenium Webdriver a Chrome
- Implementació del nostre primer script WebDriver - Selenium WebDriver Tutorial # 10
- 30+ millors tutorials sobre seleni: apreneu el seleni amb exemples reals
- Manipulació de taules web, marcs i elements dinàmics a Selenium Script - Selenium Tutorial # 18