xpath functions dynamic xpath selenium
In deze zelfstudie wordt het gebruik van XPath-functies bij het identificeren van de elementen aan de hand van voorbeelden uitgelegd:
Voordat we een website automatiseren, is het nodig om het object correct te identificeren voordat we er een bewerking op kunnen uitvoeren. Zoals we weten, is de gemakkelijkste manier om het element te identificeren, door attributen zoals ID, Naam, Link, Klasse of elk ander uniek attribuut dat beschikbaar is met de tag waarin het element zich bevindt.
Dit is alleen mogelijk als deze attributen aanwezig en / of uniek zijn zodat het object correct geïdentificeerd wordt.
Bekijk hier de Selenium-beginnershandleiding.
Wat je leert:
Overzicht van XPath-functies
Laten we het scenario bespreken waarin de attributen niet direct beschikbaar zijn.
Probleemstelling
Hoe identificeren we het element als de locators zoals ID, Naam, Klasse, Link, etc. niet beschikbaar zijn in de element-tag?
Dit kan duidelijk worden begrepen met het gegeven voorbeeld:
Inloggen Twitter
Zoals je kunt zien in de bovenstaande schermafbeelding, heeft de koptekst 'Log in to Twitter' geen attributen eraan. Dat gezegd hebbende, kunnen we geen van de locators zoals ID, Class, Link of Name gebruiken om dit element te identificeren.
beste gratis registry cleaner windows 7
De Firepath-plug-in van de Firefox-tool heeft het onderstaande XPath gegenereerd:
// * (@ id = ’page-container’) / div / div (1) / h1
We raden het gebruik van de bovenstaande XPath niet aan als paginastructuur of id, aangezien deze dynamisch kan veranderen. Als we gebruik maken van deze onstabiele XPath, moeten we de XPath mogelijk vaker wijzigen, wat meer tijd in beslag neemt om te onderhouden. Dit is een geval waarin we de generieke XPath-expressie niet kunnen gebruiken met locators zoals id, class, name of link.
Oplossing
Het element identificeren met behulp van de XPath-functies op tekst
Omdat we de zichtbare tekst “Inloggen op Twitter” bij ons beschikbaar hebben, maken we gebruik van het volgende XPath-functies om het element uniek te identificeren.
- bevat () (Op tekst)
- starts-with () (Op tekst)
- tekst()
XPath-functies zoals contains (), starts-with () en text (), indien gebruikt met behulp van de tekst 'Log in to Twitter', zouden ons helpen het element correct te identificeren, en verdere bewerkingen kunnen op hetzelfde worden uitgevoerd.
# 1) Bevat () Methode:
Syntaxis: Gebruik een van de volgende XPath-expressies die de methode contains () bevatten om het webelement 'Inloggen op Twitter' te vinden.
Op tekst
- // h1 (bevat (text (), ’Inloggen op’))
- // h1 (bevat (text (), ’in naar Twitter’))
Opmerking: 1 overeenkomend knooppunt geeft aan dat het webelement met succes is geïdentificeerd.
Uit het bovenstaande voorbeeld is het duidelijk dat de methode contains () de absolute (volledige) tekst niet nodig heeft om het element correct te identificeren. De gedeeltelijke tekst is voldoende om deze correct te identificeren. De geselecteerde gedeeltelijke tekst moet echter uniek zijn. De gebruiker kan het element gemakkelijk identificeren, zelfs als de oriëntatie van de pagina wordt gewijzigd met behulp van de methode contains ().
Houd er rekening mee dat zelfs als u de absolute tekst 'Log in to Twitter' gebruikt met de methode contains (), het element correct wordt geïdentificeerd.
# 2) Starts-with () -methode:
Syntaxis: Gebruik de volgende XPath-voorbeelduitdrukkingen met de methode starts-with () om het webelement 'Log in to Twitter' te vinden.
Op tekst
- // h1 (starts-with (text (), ’Log in’))
- // h1 (starts-with (text (), ’Log in to’))
Uit het bovenstaande voorbeeld is het duidelijk dat de XPath-functies start-with () -methode ten minste het eerste woord ('Log') van de zichtbare tekst vereist om het element uniek te identificeren. Het werkt ook op de gedeeltelijke tekst en zal mislukken als we het eerste woord van de gedeeltelijk zichtbare tekst niet opnemen.
Houd er rekening mee dat zelfs als u de absolute tekst 'Log in to Twitter' gebruikt met de methode starts-with (), het element correct wordt geïdentificeerd.
Ongeldige XPath voor starts-with (): // h1 (starts-with (text (), ’in to Twitter’))
Notitie: Geen overeenkomende knooppunten geven aan dat het webelement niet is geïdentificeerd.
# 3) Tekst () methode:
Syntaxis: Gebruik de volgende XPath-expressie met de methode text () om het webelement 'Inloggen op Twitter' te vinden.
In deze uitdrukking gebruiken we de absolute tekst die aanwezig is tussen de start-tag. Als we de functie text () gebruiken met een gedeeltelijk Xpath, zoals we doen in contains () en starts-with (), zouden we het element niet kunnen vinden.
Ongeldig Xpath voor tekst ():
Het element identificeren met behulp van de XPath-functies per attribuut
We gebruiken de XPath-functies (bevat of begint met) met attribuut wanneer er enkele uniek geïdentificeerde attribuutwaarden beschikbaar zijn in de containertag. Attributen zijn toegankelijk via het '@' -symbool.
Dit kan duidelijk worden begrepen met het gegeven voorbeeld:
Inloggen Google
# 1) Bevat () Methode:
Syntaxis: Om het 'Ik doe een gok'-knopelement uniek te identificeren met behulp van de XPath-functie, bevat () met behulp van attribuut.
(i) Op waarde-attribuut:
- // input (bevat (@ waarde, ’Feeling’))
- // input (bevat (@ waarde, ’Lucky’))
Uit de bovenstaande afbeeldingen blijkt dat het gebruik van de attribuutwaarde met ofwel 'Feeling' of 'Lucky' met de methode contains () het element uniek identificeert. Het is echter belangrijk op te merken dat zelfs als we de volledige inhoud van het Value-attribuut gebruiken, het het element correct identificeert.
(ii) Op naam attribuut:
Het ongeldige hoofdlettergebruik voor de XPath-functie met het kenmerk:
We moeten heel voorzichtig zijn bij het selecteren van het attribuut dat moet worden gebruikt met de methode contains () en starts-with (). Als de kenmerkwaarde niet uniek is, kunnen we het element niet uniek identificeren.
Stel dat als we het kenmerk 'type' gebruiken bij het identificeren van de knop 'Ik doe een gok', de XPath niet werkt.
2 overeenkomende knooppunten geven aan dat het element niet correct is geïdentificeerd. Hier is de type attribuutwaarde niet uniek.
# 2) Starts-with () -methode:
De methode starts-with () met het attribuut is erg handig als we de elementen moeten vinden waarvan het vorige deel van het attribuut vast blijft terwijl het latere deel blijft veranderen. Deze benadering is erg handig wanneer de objecten de waarde van hun attributen dynamisch veranderen. Dit kan ook worden gebruikt als we vergelijkbare soorten elementen willen vastleggen.
Ga naar Facebook-login
Bekijk het eerste tekstvak 'Voornaam' en het tweede tekstvak 'Achternaam' van het aanmeldingsformulier.
Het eerste tekstvak 'Voornaam' wordt geïdentificeerd.
Het tweede tekstvak 'Achternaam' wordt geïdentificeerd.
In beide tekstvakken die zijn geïdentificeerd voor Aanmelden voor Facebook, blijft het startgedeelte van de id-attributen ongewijzigd.
Voornaam id = 'u_0_2'
Achternaam id = ’u_0_4 '
Dit is het scenario waarin we het attribuut starts-with () kunnen gebruiken om alle elementen onder een dergelijk type id-attribuut te krijgen. Houd er rekening mee dat we deze twee velden alleen gebruiken ter referentie. Er kunnen echter meer velden op het scherm zijn met id's die beginnen met 'u_0_'.
Begint met () (Op kenmerk-id)
Belangrijke notitie: Hier hebben we dubbele aanhalingstekens gebruikt in plaats van enkele aanhalingstekens. Maar enkele aanhalingstekens werken ook met de start-met-methode.
11 overeenkomende knooppunten geven aan dat dit XPath alle elementen heeft geïdentificeerd die de id's beginnen met 'u_0_'. Het laatste deel van de id (2 voor voornaam, 4 voor achternaam, etc.) bepaalt hoe we het element uniek identificeren.
We kunnen het functie-attribuut starts-with gebruiken waar we het vergelijkbare type elementen in een lijst moeten verzamelen en dynamisch een van hen moeten kiezen zonder het argument in een generieke methode te omzeilen om het element uniek te identificeren.
Volg het onderstaande voorbeeld om de start-met-functie in ons voordeel te gebruiken.
Voorbeeldcode:
Notitie: Eclipse staat het gebruik van dubbele aanhalingstekens mogelijk niet toe. Mogelijk moet u een andere code gebruiken om dynamische XPath te maken.
De voorbeeldcode wordt ter referentie gegeven. U kunt het verbeteren zodat het past in alle elementen en bewerkingen die u wilt uitvoeren en de waarden die u wilt invoeren (in het geval van tekstvelden) om de code veelzijdiger te maken.
Gevolgtrekking
Dit artikel legde uit hoe we gebruik kunnen maken van XPath Functions contains (), starts-with () en text () met attribuut en tekst om de elementen op de HTML DOM-structuur uniek te identificeren.
Hieronder staan enkele van de waarnemingen die we kunnen maken voor de XPath-functies:
- Maak gebruik van de methode 'contains ()' in XPath als u de gedeeltelijke constante zichtbare tekst of het kenmerk kent.
- Maak gebruik van de 'starts-with ()' -methode in XPath als u de eerste gedeeltelijke constante zichtbare tekst of het kenmerk kent.
- U kunt ook de methode contains () en starts-with () gebruiken met absolute tekst of attribuut.
- Maak gebruik van de 'text ()' - methode in XPath als u zich bewust bent van de absoluut zichtbare tekst.
- U kunt de methode text () niet gebruiken met de gedeeltelijke tekst.
- U kunt de methode starts-with () niet gebruiken als de initiële tekst niet wordt gebruikt in XPath of als de initiële tekst voortdurend verandert.
In de volgende tutorial zullen we leren hoe we XPath Axes met XPath Functions kunnen gebruiken om de locatie van elementen op de beschikbare webpagina verder te verbeteren.
Lees de Easy Selenium Training Series door.
Aanbevolen literatuur
- Seleniumlocators: identificeer webelementen met XPath in selenium (voorbeelden)
- Omgaan met webtabellen, frames en dynamische elementen in Selenium Script - Selenium Tutorial # 18
- Python String-functies
- Xpath Extractor Post-Processor in JMeter
- Selenium Find Element By Text Tutorial met voorbeelden
- Cucumber Selenium Tutorial: Cucumber Java Selenium WebDriver Integration
- Een uitgebreide XPath-zelfstudie - XML-padtaal
- Inleiding tot Selenium WebDriver - Selenium Tutorial # 8