xpath axes dynamic xpath selenium webdriver
Deze tutorial legt XPath-assen uit voor dynamische XPath in Selenium WebDriver met behulp van verschillende gebruikte XPath-assen, voorbeelden en uitleg van de structuur:
In de vorige tutorial hebben we geleerd over XPath-functies en het belang ervan bij het identificeren van het element. Wanneer echter meer dan één element een te vergelijkbare oriëntatie en nomenclatuur heeft, wordt het onmogelijk om het element uniek te identificeren.
Bekijk hier de perfecte selenium-trainingsgids.
Wat je leert:
Inzicht in XPath-assen
Laten we het bovengenoemde scenario begrijpen met behulp van een voorbeeld.
Denk aan een scenario waarin twee links met de tekst 'Bewerken' worden gebruikt. In dergelijke gevallen wordt het relevant om de nodale structuur van de HTML te begrijpen.
Kopieer en plak de onderstaande code in kladblok en sla deze op als .htm-bestand.
De gebruikersinterface ziet eruit als het onderstaande scherm:
wat is beschrijvend programmeren in qtp
Probleemstelling
V # 1) Wat te doen als zelfs XPath Functions het element niet kunnen identificeren?
Antwoord: In dat geval maken we gebruik van de XPath-assen samen met XPath-functies.
Het tweede deel van dit artikel behandelt hoe we het hiërarchische HTML-formaat kunnen gebruiken om het element te identificeren. We beginnen met het verkrijgen van wat informatie over de XPath-assen.
Vraag 2) Wat zijn XPath-assen?
Antwoord: Een XPath-as definieert de knooppuntset ten opzichte van het huidige (context) knooppunt. Het wordt gebruikt om het knooppunt te lokaliseren dat relatief is aan het knooppunt in die boom.
V # 3) Wat is een contextknooppunt?
Antwoord: Een contextknooppunt kan worden gedefinieerd als het knooppunt waar de XPath-processor momenteel naar kijkt.
Verschillende XPath-assen die worden gebruikt bij het testen van selenium
Er zijn dertien verschillende assen die hieronder worden opgesomd. We gaan ze echter niet allemaal gebruiken tijdens het testen van selenium.
- Voorouder : Deze as geeft alle voorouders aan ten opzichte van het contextknooppunt, en reikt ook tot aan het hoofdknooppunt.
- voorouder of zelf: Deze geeft het contextknooppunt en alle voorouders aan ten opzichte van het contextknooppunt, en omvat het hoofdknooppunt.
- attribuut: Dit geeft de attributen van het contextknooppunt aan. Het kan worden weergegeven met het '@' -symbool.
- kind: Dit geeft de kinderen van het contextknooppunt aan.
- neerwaarts: Dit geeft de kinderen en kleinkinderen en hun kinderen (indien aanwezig) van het contextknooppunt aan. Dit geeft NIET het kenmerk en de naamruimte aan.
- afstammeling of zelf: Dit geeft het contextknooppunt en de kinderen en kleinkinderen en hun kinderen (indien aanwezig) van het contextknooppunt aan. Dit geeft NIET het kenmerk en de naamruimte aan.
- als vervolg op: Dit geeft alle knooppunten aan die verschijnen na het contextknooppunt in de HTML DOM-structuur. Dit geeft GEEN afstammende, attribuut en naamruimte aan.
- volgende broer of zus: Deze geeft alle knooppunten op hetzelfde niveau aan (dezelfde ouder als contextknooppunt) dat verschijnen na het contextknooppunt in de HTML DOM-structuur. Dit geeft GEEN afstammende, attribuut en naamruimte aan.
- naamruimte: Dit geeft alle naamruimteknooppunten van het contextknooppunt aan.
- ouder: Dit geeft de ouder van het contextknooppunt aan.
- voorafgaande: Dit geeft alle knooppunten aan die verschijnen voordat het contextknooppunt in de HTML DOM-structuur. Dit geeft GEEN afstammende, attribuut en naamruimte aan.
- vorige broer of zus: Deze geeft alle knooppunten op hetzelfde niveau aan (dezelfde ouder als contextknooppunt) die verschijnen voordat het contextknooppunt in de HTML DOM-structuur. Dit geeft GEEN afstammende, attribuut en naamruimte aan.
- zelf: Deze geeft het contextknooppunt aan.
Structuur van XPath-assen
Overweeg de onderstaande hiërarchie om te begrijpen hoe de XPath-assen werken.
Raadpleeg hieronder een eenvoudige HTML-code voor het bovenstaande voorbeeld. Kopieer en plak de onderstaande code in de Kladblok-editor en sla deze op als .html-bestand.
De pagina ziet er als volgt uit. Onze missie is om gebruik te maken van de XPath Axes om de elementen uniek te vinden. Laten we proberen de elementen te identificeren die in de bovenstaande grafiek zijn gemarkeerd. Het contextknooppunt is 'Zoogdier'
# 1) Voorouder
Dagboek: Om het voorouderelement te identificeren vanuit het contextknooppunt.
XPath # 1: // div (@ class = ’Mammal’) / voorouder :: div
De XPath '// div (@ class =’ Mammal ’) / ancestor :: div' genereert twee overeenkomende knooppunten:
- Gewervelde dieren, aangezien het de ouder is van 'Mammal', daarom wordt het ook als de voorouder beschouwd.
- Dier aangezien het de ouder is van de ouder van 'Mammal', daarom wordt het als een voorouder beschouwd.
Nu hoeven we slechts één element te identificeren dat de klasse 'Dier' is. We kunnen de XPath gebruiken zoals hieronder vermeld.
Als je bij de tekst 'Animal' wilt komen, kan hieronder XPath worden gebruikt.
# 2) Voorouder of zelf
Dagboek: Om het contextknooppunt en het bovenliggende element te identificeren vanuit het contextknooppunt.
XPath # 1: // div (@ class = ’Mammal’) / ancestor-or-self :: div
De bovenstaande XPath # 1 gooit drie overeenkomende knooppunten:
- Dier (voorouder)
- Gewervelde
- Zoogdier (zelf)
# 3) Kind
Dagboek: Om het kind van contextknooppunt “Zoogdier” te identificeren.
XPath # 1: // div (@ class = ’Mammal’) / kind :: div
XPath # 1 helpt bij het identificeren van alle kinderen van contextknooppunt 'Mammal'. Als je het specifieke onderliggende element wilt ophalen, gebruik dan XPath # 2.
XPath # 2: // div (@ class = ’Mammal’) / kind :: div (@ class = ’Herbivoor’) / h5
hoe je een computer programmeert voor beginners
# 4) Nakomelingen
Dagboek: Om de kinderen en kleinkinderen van het contextknooppunt te identificeren (bijvoorbeeld: ‘Dier’).
XPath # 1: // div (@ class = ’Animal’) / afstammeling :: div
Omdat Animal het bovenste lid in de hiërarchie is, worden alle onderliggende en afstammende elementen gemarkeerd. We kunnen ook het contextknooppunt wijzigen voor onze referentie en elk gewenst element als knooppunt gebruiken.
# 5) Nakomelingen-of-zelf
Dagboek: Om het element zelf en zijn nakomelingen te vinden.
XPath1: // div (@ class = ’Dier’) / afstammeling-of-zelf :: div
Het enige verschil tussen afstammeling en afstammeling-of-zelf is dat het zichzelf benadrukt naast het benadrukken van de nakomelingen.
# 6) Volgen
Dagboek: Om alle knooppunten te vinden die volgen op het contextknooppunt. Hier is het contextknooppunt de div die het Mammal-element bevat.
XPath: // div (@ class = ’Mammal’) / volgende :: div
In de volgende assen worden alle knooppunten die het contextknooppunt volgen, of het nu het kind of de afstammeling is, gemarkeerd.
# 7) Volgend broer of zus
Dagboek: Om alle knooppunten na het contextknooppunt te vinden die dezelfde ouder delen en een broer of zus zijn van het contextknooppunt.
XPath: // div (@ class = ’Mammal’) / volgende broer of zus :: div
Het belangrijkste verschil tussen de volgende en de volgende broer of zus is dat de volgende broer of zus alle knooppunten op hetzelfde niveau neemt na de context, maar ook dezelfde ouder deelt.
# 8) Voorafgaand
Dagboek: Het heeft alle knooppunten nodig die vóór het contextknooppunt komen. Het kan het ouder- of grootouderknooppunt zijn.
Hier is het contextknooppunt ongewervelde en gemarkeerde lijnen in de bovenstaande afbeelding zijn alle knooppunten die vóór het ongewervelde knooppunt komen.
# 9) Voorgaande broer of zus
Dagboek: Om de broer of zus te vinden die dezelfde ouder deelt als het contextknooppunt, en dat vóór het contextknooppunt komt.
Aangezien het contextknooppunt de ongewervelde is, is het enige element dat wordt gemarkeerd de gewervelde, aangezien deze twee broers en zussen zijn en dezelfde ouder ‘Dier’ delen.
# 10) Ouder
Dagboek: Om het bovenliggende element van het contextknooppunt te vinden. Als het contextknooppunt zelf een voorouder is, heeft het geen bovenliggend knooppunt en worden er geen overeenkomende knooppunten opgehaald.
Contextknooppunt # 1: zoogdier
XPath: // div (@ class = ’Mammal’) / parent :: div
Omdat het contextknooppunt Zoogdier is, wordt het element met Gewervelde hond gemarkeerd omdat dat de ouder van het Zoogdier is.
Contextknooppunt # 2: Animal
XPath: // div (@ class = ’Dier’) / ouder :: div
Omdat het dierknooppunt zelf de voorouder is, zal het geen knooppunten markeren en daarom zijn er geen overeenkomende knooppunten gevonden.
# 11) Zelf
Dagboek: Om het contextknooppunt te vinden, wordt het zelf gebruikt.
Contextknooppunt: Zoogdier
XPath: // div (@ class = ’Mammal’) / self :: div
Zoals we hierboven kunnen zien, is het zoogdierobject uniek geïdentificeerd. We kunnen ook de tekst 'Zoogdier' selecteren met behulp van de onderstaande XPath.
XPath: // div (@ class = ’Mammal’) / self :: div / h4
Gebruik van voorgaande en volgende assen
Stel dat u weet dat uw doelelement is hoeveel tags voor of achter het contextknooppunt staan, dan kunt u dat element direct markeren en niet alle elementen.
Voorbeeld: voorafgaan (met index)
Laten we aannemen dat ons contextknooppunt 'Overig' is en we willen het element 'Zoogdier' bereiken, we zouden de onderstaande benadering gebruiken om dit te doen.
Eerste stap: Gebruik gewoon voorgaande zonder een indexwaarde op te geven.
XPath: // div (@ class = ’Andere’) / voorafgaande :: div
Dit geeft ons 6 overeenkomende knooppunten, en we willen slechts één doelknooppunt 'Zoogdier'.
Tweede stap: Geef de indexwaarde (5) aan het div-element (door omhoog te tellen vanaf het contextknooppunt).
XPath: // div (@ class = ’Other’) / voorafgaande :: div (5)
Op deze manier is het element 'Zoogdier' met succes geïdentificeerd.
Voorbeeld: volgende (met index)
Laten we aannemen dat ons contextknooppunt 'Zoogdier' is en we het element 'Schaaldier' willen bereiken, we zullen de onderstaande benadering gebruiken om dit te doen.
Eerste stap: Gebruik gewoon het volgende zonder een indexwaarde op te geven.
XPath: // div (@ class = ’Mammal’) / volgende :: div
Dit geeft ons 4 overeenkomende knooppunten en we willen slechts één gericht knooppunt 'Crustacean'
Tweede stap: Geef de indexwaarde (4) aan het div-element (tel vooruit vanaf het contextknooppunt).
XPath: // div (@ class = ’Other’) / volgende :: div (4)
Op deze manier is het element “Crustacean” succesvol geïdentificeerd.
Het bovenstaande scenario kan ook opnieuw worden gemaakt met vorige broer of zus en volgende broer of zus door de bovenstaande benadering toe te passen.
Gevolgtrekking
Objectidentificatie is de meest cruciale stap in de automatisering van elke website. Als u de vaardigheid kunt verwerven om het object nauwkeurig te leren, is 50% van uw automatisering voltooid. Hoewel er locators beschikbaar zijn om het element te identificeren, zijn er enkele gevallen waarin zelfs de locators het object niet kunnen identificeren. In dergelijke gevallen moeten we verschillende benaderingen toepassen.
Hier hebben we XPath-functies en XPath-assen gebruikt om het element uniek te identificeren.
We sluiten dit artikel af met een paar punten om te onthouden:
- U mag geen 'voorouder' -assen toepassen op het contextknooppunt van het contextknooppunt zelf is de voorouder.
- U moet geen 'bovenliggende' assen toepassen op het contextknooppunt van het contextknooppunt zelf is de voorouder.
- U moet geen 'onderliggende' assen toepassen op het contextknooppunt van het contextknooppunt zelf is de afstammeling.
- U moet geen 'afstammende' assen toepassen op het contextknooppunt van het contextknooppunt zelf is de voorouder.
- Pas geen 'volgende' assen toe op het contextknooppunt, dit is het laatste knooppunt in de HTML-documentstructuur.
- Pas geen 'voorgaande' assen toe op het contextknooppunt, dit is het eerste knooppunt in de HTML-documentstructuur.
Veel plezier met leren !!!
hoe is linux beter dan windows
Bezoek hier voor de exclusieve Selenium Training Tutorial Series.
Aanbevolen literatuur
- XPath-functies voor dynamische XPath in selenium
- Cucumber Selenium Tutorial: Cucumber Java Selenium WebDriver Integration
- Seleniumzoekers: identificeer webelementen met XPath in selenium (voorbeelden)
- Inleiding tot Selenium WebDriver - Selenium Tutorial # 8
- ChromeDriver Selenium-zelfstudie: Selenium Webdriver-tests op Chrome
- Implementatie van ons eerste WebDriver-script - Selenium WebDriver-zelfstudie # 10
- 30+ beste selenium-zelfstudies: leer selenium met echte voorbeelden
- Omgaan met webtabellen, frames en dynamische elementen in Selenium Script - Selenium Tutorial # 18