xpath functions dynamic xpath selenium
Aquest tutorial explica l'ús de les funcions XPath per identificar els elements amb exemples:
Abans d’automatitzar qualsevol lloc web, és necessari identificar correctament l’objecte abans de poder realitzar cap operació sobre el mateix. Com sabem, la manera més senzilla d'identificar l'element és mitjançant atributs com ID, Nom, Enllaç, Classe o qualsevol altre atribut únic disponible amb l'etiqueta on resideix l'element.
Això només és possible quan aquests atributs són presents i / o són únics perquè l’objecte s’identifiqui correctament.
=> Mireu aquí la guia per a principiants de Selenium.
Què aprendreu:
Visió general de les funcions XPath
Analitzem l'escenari en què els atributs no estan disponibles fàcilment.
Plantejament del problema
Com identifiquem l'element si els localitzadors com ID, Nom, Classe, Enllaç, etc. no estan disponibles a l'etiqueta d'element?
Això es pot entendre clarament amb l'exemple donat:
Iniciar Sessió en Twitter
Com podeu veure a la captura de pantalla anterior, la capçalera 'Iniciar sessió a Twitter' no té atributs. Dit això, no podem utilitzar cap localitzador com ID, classe, enllaç o nom per identificar aquest element.
què és el nom d'usuari i la contrasenya del router
El connector Firepath de l'eina Firefox ha generat el XPath següent:
// * (@ id = ’page-container’) / div / div (1) / h1
No us recomanem que utilitzeu l'XPath anterior com a estructura de la pàgina o l'identificador, ja que pot canviar dinàmicament. Si fem ús d’aquest XPath inestable, potser hauríem de canviar XPath amb més freqüència, que requereix més temps de manteniment. Aquest és un dels casos en què no podem utilitzar l'expressió genèrica XPath amb localitzadors com identificador, classe, nom o enllaç.
Solució
Identificació de l'element mitjançant les funcions XPath per text
Com que tenim disponible el text visible 'Inicia sessió a Twitter', faríem servir el següent Funcions XPath per identificar de manera única l’element.
- contains () (Per text)
- comença amb () (Per text)
- text()
Funcions XPath com conté (), comença amb () i text () quan s’utilitza amb l’ajut del text “Inicieu sessió a Twitter” ens ajudarien a identificar l’element correctament i es poden realitzar altres operacions al mateix.
# 1) Mètode Contains ():
Sintaxi: Per trobar l'element web 'Inicieu la sessió a Twitter', utilitzeu qualsevol de les expressions XPath següents que inclouen el mètode contain ().
Per text
- // h1 (conté (text (), 'Inicia sessió a'))
- // h1 (conté (text (), 'a Twitter'))
Nota: 1 node coincident indica que l'element web s'ha identificat correctament.
De l'exemple anterior, és evident que el mètode contain () no necessita el text absolut (complet) per identificar l'element correctament. El text parcial és suficient per identificar-lo correctament. Tanmateix, el text parcial seleccionat ha de ser únic. L'usuari pot identificar fàcilment l'element fins i tot si l'orientació de la pàgina es canvia amb l'ajut del mètode contain ().
Tingueu en compte que, fins i tot si utilitzeu el text absolut 'Inicieu sessió a Twitter' amb el mètode contain (), l'element s'identificaria correctament.
# 2) Comença amb el mètode ():
Sintaxi: Per trobar l'element web 'Inicieu la sessió a Twitter', utilitzeu les expressions d'exemple XPath següents que tenen el mètode starts-with ().
Per text
- // h1 (comença amb (text (), 'Inicia sessió'))
- // h1 (comença amb (text (), 'Inicia sessió a'))
De l'exemple anterior, queda clar que el mètode de funcions XPath starts-with () requereix com a mínim la primera paraula ('Registre') del text visible per identificar de forma única l'element. També funciona amb el text parcial i fallarà si no incloem la primera paraula del text parcialment visible.
Tingueu en compte que, fins i tot si utilitzeu el text absolut 'Inicieu sessió a Twitter' amb el mètode starts-with (), l'element s'identificarà correctament.
XPath no vàlid per a començar amb (): // h1 (comença amb (text (), 'a Twitter'))
Nota: Cap node coincident indica que l'element web no s'ha identificat.
# 3) Mètode Text ():
Sintaxi: Per trobar l'element web 'Inicia sessió a Twitter', utilitza la següent expressió XPath que té el mètode text ().
En aquesta expressió, fem servir el text absolut que hi ha entre l’etiqueta d’inici. Si utilitzem la funció text () amb Xpath parcial, tal com fem a conté () i comença amb (), no podríem trobar l’element.
Xpath no vàlid per al text ():
Identificació de l'element mitjançant les funcions XPath per atribut
Utilitzem les funcions XPath (conté o comença) amb atribut quan hi ha alguns valors d'atribut identificats de manera única disponibles a l'etiqueta de contenidor. S'accedeix als atributs mitjançant el símbol '@'.
Això es pot entendre clarament amb el donat exemple:
Iniciar Sessió en Google
# 1) Mètode Contains ():
Sintaxi: Per identificar de forma única l’element del botó 'Em sento afortunat' amb l’ajut de la funció XPath conté () amb l’ajut de l’atribut.
(i) Per atribut de valor:
- // entrada (conté (valor @, 'Sentiment'))
- // entrada (conté (valor @, 'Sort'))
A partir de les imatges anteriors, s’entén que l’ús del valor de l’atribut amb el mètode “Feeling” o “Lucky” amb el mètode contain () permet identificar de forma única l’element. Tot i això, és important tenir en compte que, fins i tot si fem servir el contingut complet de l'atribut Value, identificarà l'element correctament.
(ii) Atribut per nom:
//input(contains(@name=’btnI’))
El cas no vàlid per a la funció XPath amb l'atribut:
Hem de tenir molta precaució a l’hora de seleccionar l’atribut que s’utilitzarà amb el mètode contain () i starts-with (). Si el valor de l'atribut no és únic, no podrem identificar l'element de manera única.
Suposem que, si prenem l’atribut “type” quan identifiquem el botó “Em sento afortunat”, XPath no funcionarà.
2 nodes coincidents indiquen que l'element no s'ha identificat correctament. Aquí el valor de l'atribut type no és únic.
# 2) Comença amb el mètode ():
El mètode starts-with () amb l'atribut és molt útil quan hem de trobar els elements que tenen la part anterior de l'atribut fixa mentre la part posterior continua canviant. Aquest enfocament és molt útil quan els objectes canvien dinàmicament el valor dels seus atributs. Això també es pot utilitzar si volem capturar tipus similars d'elements.
Anar a Inici de sessió de Facebook
Inspeccioneu el primer quadre de text 'Nom' i el segon quadre de text 'Cognom' del formulari d'inscripció.
S'identifica el primer quadre de text 'Nom'.
S’identifica el segon quadre de text “Cognom”.
Als dos quadres de text que s’identifiquen per al Registre a Facebook, la part inicial dels atributs d’identificador es manté sense canvis.
Identificador de nom = 'u_0_2'
Cognom id = ’u_0_4”
Aquest és l'escenari en què podem utilitzar l'atribut starts-with () per obtenir tots els elements d'aquest tipus d'atribut id. Tingueu en compte que només prenem aquests dos camps com a referència. Tot i això, a la pantalla hi pot haver més camps amb identificadors que comencin per 'u_0_'.
Comença amb () (Per identificador d'atribut)
//input(starts-with(@id,”u_0_”))
Nota important: Aquí hem utilitzat cometes dobles en lloc de cometes simples. Però les cometes simples també funcionaran amb el mètode de començaments.
11 nodes coincidents indiquen que aquest XPath ha identificat tots els elements que aquests identificadors comencen amb 'u_0_'. L'última part de l'identificador (2 per al nom, 4 per al cognom, etc.) determina com identifiquem de forma única l'element.
Podem utilitzar l’atribut de funció starts-with on hem de recollir el tipus similar d’elements d’una llista i escollir-ne dinàmicament un saltant l’argument en un mètode genèric per identificar de forma única l’element.
Seguiu l'exemple següent per utilitzar la funció de començar amb avantatge.
Codi de mostra:
/* Generic Method */ public void xpathLoc(String identifier){ //The below step identifies the element “First Name” uniquely when the argument is “2” WebElement E1=d1.findElement(By.xpath('//input(starts-with(@id,”u_0_”+identifier ))')); E1.sendKeys(“Test1”); /* This step enters the value of First Name as “Test 1” */ } /* Main Method */ public static void main(String() args) { xpathLoc(“2”); --- This step calls the xpathLoc() method to identify the first name. }
Nota: És possible que Eclipse no permeti l’ús de cometes dobles. És possible que hagueu de recórrer a diferents codis per fer XPath dinàmic.
El codi de mostra es dóna com a referència. Podeu millorar-lo perquè s'adapti a tots els elements i operacions que voleu realitzar i als valors que voleu introduir (en cas de camps de text) per fer el codi més versàtil.
Conclusió
En aquest article s’explica com podem fer ús de XPath Functions contains (), starts-with () i text () amb atribut i text per identificar de manera única els elements de l’estructura DOM HTML.
A continuació es mostren algunes de les observacions que podem fer per a les funcions XPath:
- Feu ús del mètode 'contains ()' a XPath si coneixeu el text o l'atribut de la constant parcial visible.
- Utilitzeu el mètode 'starts-with ()' a XPath si coneixeu el text o l'atribut visible de la constant parcial inicial.
- També podeu utilitzar el mètode contain () i starts-with () amb text absolut o atribut.
- Feu ús del mètode 'text ()' a XPath si sou conscient del text visible absolut.
- No podeu utilitzar el mètode text () amb el text parcial.
- No podeu fer servir el mètode starts-with () si el text inicial no s’utilitza a XPath o si el text inicial canvia constantment.
Al proper tutorial, aprendrem a fer ús dels eixos XPath amb funcions XPath per millorar encara més la ubicació dels elements a la pàgina web disponible.
=> Llegiu la sèrie d'entrenament Easy Selenium.
Lectura recomanada
- Localitzadors de seleni: identificar elements web mitjançant XPath a seleni (exemples)
- Manipulació de taules web, marcs i elements dinàmics a Selenium Script - Selenium Tutorial # 18
- Funcions de cadena de Python
- Xpath Extractor Post-Processador a JMeter
- Tutorial Selenium Find Element By Text amb exemples
- Tutorial de Cogombre Selenium: Integració de Cogombre Java Selenium WebDriver
- Un tutorial complet XPath: llenguatge de camí XML
- Introducció a Selenium WebDriver - Tutorial Selenium # 8