Locatorer i Selenium
โก Smart opsummering
Locatorer i Selenium er kommandoer, der instruerer automatiseringsmotoren til at identificere GUI-elementer sรฅsom tekstbokse, knapper og afkrydsningsfelter. Denne reference forklarer ID-, navn-, linktekst-, DOM- og XPath-lokaliseringstyper med praktiske eksempler, syntaksregler og udvรฆlgelsesstrategier til pรฅlidelige webautomatiseringsscripts.

Hvad er lokaliseringsvรฆrktรธjer i Selenium?
En lokaliseringsenhed er en kommando, der dirigerer Selenium IDE eller Selenium WebDriver til det korrekte GUI-element, sรฅsom en tekstboks, knap, link eller afkrydsningsfelt, hvor en handling skal udfรธres. At identificere det korrekte GUI-element er en forudsรฆtning for at bygge et pรฅlideligt automatiseringsscript. Nรธjagtig identifikation er dog mere udfordrende, end det lyder. Nogle gange kan du ende med at interagere med det forkerte element eller slet ikke med noget element. For at lรธse dette, Selenium tilbyder en rรฆkke lokaliseringsstrategier, der muliggรธr prรฆcis mรฅlretning af GUI-elementer.
Selvom nogle kommandoer, sรฅsom kommandoen "รฅbn", ikke krรฆver en locator, krรฆver stรธrstedelen af Selenium Kommandoer afhรฆnger af elementlokaliseringsvรฆrktรธjer. Valget af lokator afhรฆnger i hรธj grad af din applikation under test (AUT). I denne vejledning vil vi skifte mellem Facebook og Mercury Tours demoside (newtours.demoaut), baseret pรฅ hvilke lokaliseringsvรฆrktรธjer hver applikation understรธtter. Ligeledes i din egen test projekt, skal du vรฆlge en elementsรธger i Selenium WebDriver baseret pรฅ strukturen af โโdin applikation.
Lokalisering efter ID
Dette er den mest almindelige metode til at finde elementer, fordi ID'er er beregnet til at vรฆre unikke for hvert element pรฅ en side. Nรฅr en ID-attribut findes, bรธr den vรฆre dit fรธrstevalg for hurtige, stabile og lรฆsbare testscripts.
Target Format: id=id for elementet
I dette eksempel bruger vi en Facebook-demoside fordi Mercury Tours bruger ikke ID-attributter til sine primรฆre formularfelter.
Trin 1) Brug denne demoside https://demo.guru99.com/test/facebook.html til test. Undersรธg tekstfeltet "E-mail eller telefon" ved hjรฆlp af din browsers indbyggede udviklervรฆrktรธjer (tryk pรฅ F12 i Chrome, Edge eller Firefox) og noter dens ID. I dette tilfรฆlde er ID'et "e-mail".
Trin 2) Launch Selenium IDE og indtast "id=email" i Target boks. Klik pรฅ knappen Sรธg, og bemรฆrk, at tekstfeltet "E-mail eller telefon" er fremhรฆvet med gult med en grรธn kant, hvilket angiver, at Selenium IDE har placeret elementet korrekt.
Finder efter navn
At lokalisere elementer efter navn minder om at lokalisere efter ID, bortset fra at vi bruger "navn =" prรฆfiks i stedet. Denne tilgang er nyttig, nรฅr elementer mangler et ID, men har en defineret navneattribut.
Target Format: navn=navn pรฅ elementet
Til den fรธlgende demonstration vil vi bruge Mercury Rundvisninger fordi alle vรฆsentlige formelementer pรฅ webstedet har en navneattribut.
Trin 1) Naviger til https://demo.guru99.com/test/newtours/ og brug browserens udviklervรฆrktรธjer til at undersรธge tekstfeltet "Brugernavn". Bemรฆrk dens navneattribut.
Her er elementets navn "brugernavn".
Trin 2) In Selenium IDE, indtast "navn=brugernavn" i Target boksen og klik pรฅ knappen Find. Selenium IDE bรธr finde tekstfeltet Brugernavn ved at markere det.
Sรฅdan finder du element efter navn ved hjรฆlp af filtre
Filtre er nyttige, nรฅr flere elementer deler den samme navneattribut. Filtre er yderligere attributter, der bruges til at skelne mellem elementer, der deler et identisk navn. Uden filtre, Selenium ville som standard kun bruge det fรธrste matchende element.
Target Format: navn=navn_pรฅ_elementet filter=vรฆrdi_af_filter
Lad os gennemgรฅ et eksempel.
Trin 1) Log pรฅ Mercury Ture.
Log ind pรฅ Mercury Ture med "tutorial" som bรฅde brugernavn og adgangskode. Siden Flight Finder burde vises som vist nedenfor.
Trin 2) Brug udviklervรฆrktรธjer til at inspicere VALUE-attributterne.
Bemรฆrk, at radioknapperne for tur/retur og enkeltbillet deler det samme navn "tripType". De har dog forskellige VALUE-attributter, sรฅ vi kan bruge hver vรฆrdi som et filter.
Trin 3) Klik pรฅ den fรธrste rรฆkke i editoren.
- Vi skal fรธrst tilgรฅ radioknappen Ensrettet. Klik pรฅ den fรธrste linje i Selenium IDE-editor.
- I kommandofeltet skal du indtaste kommandoen "klik".
- I Target I feltet skal du indtaste "name=tripType value=oneway". Delen "value=oneway" fungerer som vores filter.
Trin 4) Klik pรฅ knappen Find.
Lรฆg mรฆrke til det Selenium IDE fremhรฆver radioknappen Envejs med grรธnt, hvilket bekrรฆfter, at elementet er blevet tilgรฅet via dets VALUE-attribut.
Trin 5) Vรฆlg radioknappen Ensrettet.
Tryk pรฅ "X"-tasten pรฅ tastaturet for at udfรธre klikkommandoen. Radioknappen Envejs er nu valgt.
Du kan udfรธre den samme handling pรฅ alternativknappen Rundtur, denne gang med "navn=turtype vรฆrdi=rundtur" som dit mรฅl.
Lokalisering ved hjรฆlp af linktekst
Denne lokationsstrategi gรฆlder kun for hyperlinktekster. Vi tilgรฅr linket ved at sรฆtte "link=" foran mรฅlet efterfulgt af den synlige hyperlinktekst. Denne metode er meget lรฆsbar og fungerer godt til navigationstest.
Target Format: link=link_tekst
I fรธlgende eksempel bruger vi linket "REGISTER" pรฅ Mercury Tours hjemmeside.
Trin 1)
- Fรธrst skal du sรธrge for at du er logget ud af Mercury Ture.
- Naviger til Mercury Tours hjemmeside.
Trin 2)
- Brug Udviklervรฆrktรธjer til at undersรธge linket "REGISTER". Linkteksten vises mellem det indledende og det afsluttende ankertag.
- I dette tilfรฆlde er linkteksten "REGISTER". Kopiรฉr linkteksten.
Trin 3) Kopier linkteksten og indsรฆt den i Selenium IDE Target boks. Prรฆfiks det med "link =".
Trin 4) Klik pรฅ knappen Find. Selenium IDE vil fremhรฆve REGISTER-linket korrekt.
Trin 5) For at bekrรฆfte yderligere skal du indtaste "clickAndWait" i kommandoboksen og udfรธre det. Selenium IDE klikker pรฅ linket REGISTRER og fรธrer dig til registreringssiden vist nedenfor.
Lokalisering efter DOM (Document Object Model)
Dokumentobjektmodel (DOM)beskriver enkelt sagt, hvordan HTML-elementer er struktureret som et trรฆ af noder. Selenium IDE kan navigere i dette trรฆ for at fรฅ adgang til sideelementer. Nรฅr denne metode bruges, Target Feltet starter altid med โdom=dokumentโฆโ. Prรฆfikset โdom=โ udelades typisk fordi Selenium IDE fortolker automatisk enhver vรฆrdi, der starter med "dokument", som en DOM-sti.
Der er fire grundlรฆggende mรฅder at finde et element via DOM'en i Selenium:
- getElementById
- getElementsByName
- dom:navn (gรฆlder kun for elementer i en navngivet form)
- dom:indeks
Lokalisering efter DOM โ getElementById
Lad os fรธrst undersรธge getElementById-metoden i DOM'en i SeleniumDenne metode returnerer et enkelt element ved at matche dets ID-attribut.
Syntaks
document.getElementById("id of the element")
- Elementets id = vรฆrdien af โโID-attributten for det element, der skal tilgรฅs. Denne vรฆrdi skal altid omsluttes af et par anfรธrselstegn.
Trin 1) Brug denne demoside https://demo.guru99.com/test/facebook.htmlNaviger til den, og brug Udviklervรฆrktรธjer til at kontrollere afkrydsningsfeltet "Hold mig logget ind". Noter dens ID.
Det ID, vi skal bruge, er โpersist_boxโ.
Trin 2) ร bne Selenium IDE og i Target Indtast document.getElementById(โpersist_boxโ) i feltet, og klik derefter pรฅ Sรธg. Selenium IDE finder afkrydsningsfeltet "Hold mig logget ind". Selvom det ikke kan fremhรฆve det indre af afkrydsningsfeltet, omgiver det elementet med en lysegrรธn kant, som vist nedenfor.
Lokalisering efter DOM โ getElementsByName
Metoden getElementById tilgรฅr kun รฉt element ad gangen, nemlig elementet med det angivne ID. Metoden getElementsByName opfรธrer sig anderledes. Den returnerer et array af elementer, der deler det angivne navn. Individuelle elementer tilgรฅs ved hjรฆlp af et numerisk indeks, der starter ved 0.
Syntaks
document.getElementsByName("name")[index]
- navn = navnet pรฅ elementet som defineret af dets 'navn'-attribut
- index = et heltal, der angiver hvilket element i getElementsByName's array der vil blive brugt.
Trin 1) Naviger til Mercury Gรฅ til Tours hjemmeside og log ind med "tutorial" som brugernavn og adgangskode. Browseren vil indlรฆse Flight Finder-skรฆrmen.
Trin 2) Brug Udviklervรฆrktรธjer til at undersรธge de tre alternativknapper nederst pรฅ siden (รkonomiklasse, Businessklasse og Fรธrste klasse). Bemรฆrk, at de alle deler det samme navn, "servClass".
Trin 3) Lad os fรธrst finde alternativknappen "รkonomiklasse". Af de tre alternativknapper vises dette element fรธrst, sรฅ dets indeks er 0. I Selenium IDE, skriv document.getElementsByName("servClass")[0] og klik pรฅ knappen Sรธg. Selenium IDE vil identificere alternativknappen for รธkonomiklasse korrekt.
Trin 4) รndr indeksnummeret til 1, sรฅ din Target bliver document.getElementsByName(โservClassโ)[1]. Klik pรฅ knappen Find, og Selenium IDE vil fremhรฆve alternativknappen "Business class" som vist nedenfor.
Lokalisering efter DOM โ dom:navn
Som tidligere nรฆvnt gรฆlder denne metode kun, hvis det element, du tilgรฅr, er indeholdt i en navngiven formular. Finderstien begynder ved formularen og gรฅr derefter ned til mรฅlelementet efter navn.
Syntaks
document.forms["name of the form"].elements["name of the element"]
- formularens navn = vรฆrdien af โโnavneattributten for formulartagget, der indeholder det element, du รธnsker at fรฅ adgang til.
- navnet pรฅ elementet = vรฆrdien af โโnavneattributten for det element, du รธnsker at fรฅ adgang til
Trin 1) Naviger til Mercury Tours hjemmeside https://demo.guru99.com/test/newtours/ og brug Udviklervรฆrktรธjer til at undersรธge tekstfeltet Brugernavn. Bemรฆrk, at det er indeholdt i en formular med navnet "hjem".
Trin 2) In Selenium IDE, skriv document.forms[โhomeโ].elements[โbrugernavnโ] og klik pรฅ knappen Sรธg. Selenium IDE'en vil tilgรฅ elementet.
Lokalisering efter DOM โ dom:index
Denne metode gรฆlder, selv nรฅr elementet ikke er inden for en navngivet formular, fordi den bruger formularens indeks i stedet for dens navn. Dette er nyttigt for รฆldre sider eller automatisk genererede formularer, hvor navngivning ikke er tilgรฆngelig.
Syntaks
document.forms[index of the form].elements[index of the element]
- formularens indeks = formularens indeksnummer (startende ved 0) i forhold til hele siden
- Elementets indeks = indeksnummeret (startende ved 0) for elementet i forhold til den form, der indeholder det
Vi fรฅr adgang til tekstfeltet "Telefon" pรฅ Mercury Tilmeldingsside for ture. Formularen pรฅ denne side har hverken et navn eller en ID-attribut, sรฅ den er et godt eksempel.
Trin 1) Naviger til Mercury Tilmeldingssiden for rundvisninger, og undersรธg tekstfeltet Telefon. Bemรฆrk, at den omgivende formular hverken har ID- eller navneattributter.
Trin 2) Indtast document.forms[0].elements[3] i Selenium IDE Target boksen og klik pรฅ knappen Find. Selenium IDE vil tilgรฅ tekstfeltet Telefon korrekt.
Trin 3) Alternativt kan du bruge elementets navn i stedet for dets indeks for at opnรฅ det samme resultat. Indtast document.forms[0].elements[โtelefonโ] i Target boks. Tekstfeltet Telefon vil stadig vรฆre fremhรฆvet.
Lokalisering af XPath
XPath er det forespรธrgselssprog, der bruges til at navigere i XML-noder (Extensible Markup Language). Fordi HTML kan betragtes som en implementering af XML, XPath kan ogsรฅ finde HTML-elementer. Det er en af โโde mest effektive lokaliseringsstrategier i Selenium.
- Fordel: Den kan tilgรฅ nรฆsten ethvert element, inklusive dem uden klasse-, navn- eller ID-attributter.
- Ulempe: Det er den mest komplekse lokaliseringsstrategi pรฅ grund af dens mange regler og syntaksvariationer.
Moderne browserudviklervรฆrktรธjer kan automatisk generere XPath-udtryk. I Chrome, Edge eller Firefoxskal du hรธjreklikke pรฅ et element i panelet Elementer og vรฆlge Kopiรฉr > Kopiรฉr XPath. I det fรธlgende eksempel fรฅr vi adgang til et billede, der ikke kan findes ved hjรฆlp af de metoder, der er beskrevet tidligere.
Trin 1) Naviger til Mercury Gรฅ til Tours-startsiden, og brug Udviklervรฆrktรธjer til at inspicere det orange rektangel til hรธjre for den gule "Links"-boks, som vist nedenfor.
Trin 2) Hรธjreklik pรฅ elementets HTML-kode, og vรฆlg derefter indstillingen "Kopier XPath".
Trin 3) In Selenium IDE, skriv et enkelt skrรฅstreg "/" i Target boksen, og indsรฆt derefter den XPath, der blev kopieret i det forrige trin. Indgangen i Target boksen skal nu begynde med to skrรฅstreger "//".
Trin 4) Klik pรฅ knappen Find. Selenium IDE vil fremhรฆve den orange boks, som vist nedenfor.
Hvorfor det er vigtigt at vรฆlge den rigtige lokator
At vรฆlge den rigtige lokaliseringsstrategi er en af โโde mest indflydelsesrige beslutninger i Selenium automatisering, fordi det direkte pรฅvirker scriptstabilitet, udfรธrelseshastighed og langsigtede vedligeholdelsesomkostninger. En dรฅrligt valgt locator kan forรฅrsage ustabile tests, falske fejl og hyppig omarbejdning, nรฅr applikationens brugergrรฆnseflade รฆndres. Den foretrukne rรฆkkefรธlge, der anbefales af erfarne automatiseringsingeniรธrer, er ID fรธrst, derefter Navn, efterfulgt af CSS Selector, Linktekst og til sidst XPath.
ID-baserede locators er de hurtigste, fordi browserens opslag er optimeret til unikke identifikatorer. Navnebaserede locators er nรฆsten lige sรฅ effektive, nรฅr navne er unikke. CSS Selectors og XPath giver fleksibilitet, men har en tendens til at vรฆre langsommere og mere skrรธbelige, nรฅr udviklere omstrukturerer DOM'en. Linktekst er fremragende til navigationslinks, men tilbyder begrรฆnset genbrug.
Stabil automatisering afhรฆnger ogsรฅ af samarbejde med udviklere. Nรฅr testere anmoder om konsistente og meningsfulde ID- eller data-*-attributter under kodegennemgange, forbedres locator-holdbarheden betydeligt. Undgรฅ at stole pรฅ automatisk genererede ID'er (sรฅsom dem, der produceres af frameworks), da de kan รฆndre sig mellem builds. Ved at prioritere lรฆsbare, intentionsdrevne locators kan teams holde testsuiter vedligeholdbare og reducere teknisk gรฆld, efterhรฅnden som applikationen udvikler sig.
De bedste fremgangsmรฅder til at skrive pรฅlidelige lokaliseringsfindere
Pรฅlidelige lokaliseringssystemer er fundamentet for en vedligeholdelig Selenium testsuite. Fรธlgende fremgangsmรฅder hjรฆlper med at reducere scriptfejl, forbedre lรฆsbarheden og gรธre tests modstandsdygtige over for รฆndringer i brugergrรฆnsefladen.
- Foretrรฆk unikke ID'er: Tjek altid fรธrst efter en ID-attribut. ID'er er beregnet til at vรฆre unikke pรฅ en side og er det mest effektive valg.
- Brug semantisk navn og data-* attributter: Opfordr udviklere til at tilfรธje stabile testattributter sรฅsom data-testid eller data-qa. Disse forbliver konsistente, selv nรฅr CSS-klasser รฆndres.
- Undgรฅ absolut XPath: Absolutte stier som /html/body/div[2]/div[3]/span brydes let. Brug relative XPath-udtryk med attributter som //input[@name='userName'].
- Kombinรฉr attributter for prรฆcision: Nรฅr en enkelt attribut ikke er unik, skal du kombinere flere attributter (f.eks. //button[@type='submit' og @name='login']) for at mรฅlrette det korrekte element.
- Brug teksten klogt: Lokaliseringsvรฆrktรธjer, der er afhรฆngige af synlig tekst, kan muligvis ikke fungere pรฅ tvรฆrs af sproglokaliseringer. Brug kun tekstbaserede lokaliseringsvรฆrktรธjer, nรฅr indholdet er stabilt og ensproget.
- Centraliser lokaliseringspunkter: Gem locators i en Page Object Model (POM)-klasse, sรฅ opdateringer kan foretages รฉt sted i stedet for pรฅ tvรฆrs af mange testscripts.
- Valider i udviklervรฆrktรธjer: Fรธr du tilfรธjer en locator til et script, skal du teste den i browserkonsollen ved hjรฆlp af $x("//xpath") for XPath eller document.querySelector for CSS for at bekrรฆfte, at den returnerer prรฆcis รฉt element.
- Undgรฅ indeksbaserede lokaliseringspunkter, nรฅr det er muligt: Indekspositioner som [3] afhรฆnger af elementernes rรฆkkefรธlge. Selv mindre layoutรฆndringer kan รฆndre indekset og รธdelรฆgge scriptet.
Ved at anvende disse fremgangsmรฅder konsekvent kan automationsingeniรธrer skabe testpakker, der skaleres pรฅ tvรฆrs af teams og overlever hyppige brugergrรฆnsefladeopdateringer med minimal vedligeholdelse.





























