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.

  • ๐ŸŽ“ FoundationPrincip: Brug ID-lokaliseringsvรฆrktรธjer fรธrst, fordi de er unikke og giver den hurtigste og mest stabile elementidentifikation.
  • ๐Ÿš€ Implementeringsfokus: Anvend navnelokaliseringsvรฆrktรธjer med filterattributter for at skelne mellem elementer, der deler identiske navnevรฆrdier, f.eks. radioknapper.
  • ๐Ÿ’ก Avanceret teknik: Udnyt DOM-metoder som getElementById, getElementsByName og formularindeksering for at fรฅ adgang til dybt indlejrede elementer.
  • ๐Ÿ€ Optimeringsstrategi: Vรฆlg XPath for elementer, der mangler klasse-, navn- eller ID-attributter, men balancer fleksibilitet med scriptvedligeholdelsesomkostninger.
  • ๐Ÿ‘œ Kvalitetspรฅvirkning: Valg af den rigtige locatortype pรฅvirker direkte scriptets pรฅlidelighed, udfรธrelseshastighed og langsigtet testvedligeholdelse.

Lokalisering via ID i Selenium

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".

Lokalisering via ID i Selenium

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.

Lokalisering via ID-verifikation

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.

Lokalisering efter navn i Selenium

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.

Lokalisering via navnebekrรฆftelse

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.

Find element efter navn ved hjรฆlp af filtre

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.

Filtrer efter vรฆrdiattribut

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.

Klik pรฅ kommandoen med 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.

Filterbekrรฆftelse

Trin 5) Vรฆlg radioknappen Ensrettet.

Tryk pรฅ "X"-tasten pรฅ tastaturet for at udfรธre klikkommandoen. Radioknappen Envejs er nu valgt.

Ensrettet valg

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.

Lokalisering ved hjรฆlp af linktekst

Trin 3) Kopier linkteksten og indsรฆt den i Selenium IDE Target boks. Prรฆfiks det med "link =".

Link tekst ind Target

Trin 4) Klik pรฅ knappen Find. Selenium IDE vil fremhรฆve REGISTER-linket korrekt.

Linktekst fremhรฆvet

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.

Registreringsside

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.

getElementById-inspektion

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.

getElementById-bekrรฆftelse

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.

getElementById-illustration getElementById
Den returnerer kun รฉt element. Elementet bรฆrer det ID, der er angivet i parenteserne i getElementById().
getElementsByName-illustration getElementsByName
Den returnerer en samling af elementer, hvis navne er identiske. Hvert element er indekseret af et tal, der starter fra 0, ligesom et array. Du vรฆlger et specifikt element ved at placere dets indeks i de firkantede parenteser i syntaksen nedenfor.

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".

getElementsByName Inspektion

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.

Beliggende i รธkonomiklasse

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.

Business Class Placering

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".

dom:name Inspektion

Trin 2) In Selenium IDE, skriv document.forms[โ€œhomeโ€].elements[โ€œbrugernavnโ€] og klik pรฅ knappen Sรธg. Selenium IDE'en vil tilgรฅ elementet.

dom:name Bekrรฆftelse

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.

dom:index Inspektion

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.

dom:index Bekrรฆftelse

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.

dom:indeks efter navn

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.

XPath-elementinspektion

Trin 2) Hรธjreklik pรฅ elementets HTML-kode, og vรฆlg derefter indstillingen "Kopier XPath".

Kopier XPath-indstilling

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 "//".

XPath indsat

Trin 4) Klik pรฅ knappen Find. Selenium IDE vil fremhรฆve den orange boks, som vist nedenfor.

XPath-bekrรฆftelse

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.

  1. 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.
  2. 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.
  3. 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'].
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.

Ofte Stillede Spรธrgsmรฅl

ID-lokaliseringsvรฆrktรธjet er det hurtigste, fordi browsere optimerer opslag for unikke identifikatorer. Nรฅr ID'er ikke er tilgรฆngelige, er Navn og CSS-selektor typisk hurtigere end XPath, som gennemgรฅr DOM'en mere omfattende under elementoplรธsning.

Absolut XPath starter fra roden af โ€‹โ€‹HTML-dokumentet og fรธlger en komplet sti, hvilket gรธr det skrรธbeligt. Relativ XPath starter hvor som helst i DOM'en ved hjรฆlp af attributter som //input[@id='email'], hvilket giver mere stabil og vedligeholdelig elementmรฅlretning.

Firebug blev udgรฅet i 2017. Moderne browsere har indbyggede udviklervรฆrktรธjer, der tilgรฅs via F12 i Chrome, Edge og FirefoxDisse vรฆrktรธjer tilbyder elementinspektion, kopiering af XPath, kopiering af CSS-vรฆlger og konsoltestning til validering af locator.

Ja. AI-drevne vรฆrktรธjer som f.eks. Testim, Mabl og Functionize analyserer DOM'en og genererer selvreparerende locatorer. Disse platforme bruger maskinlรฆring til at justere locatorer automatisk, nรฅr brugergrรฆnsefladen รฆndres, hvilket reducerer vedligeholdelse og ustabile testfejl.

AI-drevne selvreparerende motorer lรฆrer hvert elements omgivende attributter, position og DOM-kontekst at kende. Nรฅr den oprindelige locator fejler, vรฆlger motoren det nรฆrmeste match ved hjรฆlp af sandsynlighedsscorer, hvilket giver testscripts mulighed for at fortsรฆtte med at kรธre uden manuel indgriben.

Opsummer dette indlรฆg med: