Lokatorer i Selenium
โก Smart oppsummering
Lokatorer i Selenium er kommandoer som instruerer automatiseringsmotoren til รฅ identifisere GUI-elementer som tekstbokser, knapper og avmerkingsbokser. Denne referansen forklarer ID-, navn-, lenketekst-, DOM- og XPath-lokaliseringstyper med praktiske eksempler, syntaksregler og utvalgsstrategier for pรฅlitelige webautomatiseringsskript.

Hva er lokaliseringsverktรธy i Selenium?
En lokator er en kommando som dirigerer Selenium IDE eller Selenium WebDriver til riktig GUI-element, for eksempel en tekstboks, knapp, lenke eller avmerkingsboks, der en handling mรฅ utfรธres. ร identifisere riktig GUI-element er en forutsetning for รฅ bygge et pรฅlitelig automatiseringsskript. Nรธyaktig identifisering er imidlertid mer utfordrende enn det hรธres ut. Noen ganger kan du ende opp med รฅ samhandle med feil element, eller uten noe element i det hele tatt. For รฅ lรธse dette, Selenium tilbyr en rekke lokaliseringsstrategier som tillater presis mรฅlretting av GUI-elementer.
Selv om noen kommandoer, som for eksempel ยซรฅpneยป-kommandoen, ikke krever en posisjoneringsfunksjon, er de fleste av Selenium Kommandoer avhenger av elementlokaliseringsverktรธy. Valget av lokator avhenger i stor grad av applikasjonen under test (AUT). I denne veiledningen vil vi veksle mellom Facebook og Mercury Demonettstedet for Tours (newtours.demoaut), basert pรฅ hvilke lokatorer hver applikasjon stรธtter. Pรฅ samme mรฅte, i ditt eget testing prosjektet, vil du velge en elementsรธker i Selenium WebDriver basert pรฅ strukturen til applikasjonen din.
Lokalisering etter ID
Dette er den vanligste metoden for รฅ finne elementer fordi ID-er er ment รฅ vรฆre unike for hvert element pรฅ en side. Nรฅr et ID-attributt finnes, bรธr det vรฆre ditt fรธrstevalg for raske, stabile og lesbare testskript.
Target Format: id=id for elementet
I dette eksemplet bruker vi en Facebook-demoside fordi Mercury Tours bruker ikke ID-attributter for hovedskjemafeltene.
Trinn 1) Bruk denne demosiden https://demo.guru99.com/test/facebook.html for testing. Undersรธk tekstboksen ยซE-post eller telefonยป ved hjelp av nettleserens innebygde utviklerverktรธy (trykk F12 i Chrome, Edge eller Firefox) og noter ID-en. I dette tilfellet er ID-en ยซe-postยป.
Trinn 2) Start Selenium IDE og skriv inn "id=email" i Target boksen. Klikk pรฅ Sรธk-knappen, og legg merke til at tekstboksen ยซE-post eller telefonยป er uthevet i gult med en grรธnn kant, noe som indikerer at Selenium IDE har funnet elementet riktig.
Finner etter navn
ร finne elementer etter navn er likt รฅ finne etter ID, bortsett fra at vi bruker "navn =" prefiks i stedet. Denne tilnรฆrmingen er nyttig nรฅr elementer mangler en ID, men har et definert navneattributt.
Target Format: navn=navn pรฅ elementet
For den fรธlgende demonstrasjonen skal vi bruke Mercury Omvisninger fordi alle viktige formelementer pรฅ nettstedet har et navneattributt.
Trinn 1) naviger til https://demo.guru99.com/test/newtours/ og bruk nettleserens utviklerverktรธy til รฅ inspisere tekstboksen ยซBrukernavnยป. Legg merke til navneattributtet.
Her er elementets navn ยซbrukernavnยป.
Trinn 2) In Selenium IDE, skriv inn "navn=brukernavn" i Target og klikk pรฅ Finn-knappen. Selenium IDE bรธr finne tekstboksen Brukernavn ved รฅ markere den.
Hvordan finne element etter navn ved hjelp av filtre
Filtre er nyttige nรฅr flere elementer deler samme navneattributt. Filtre er tilleggsattributter som brukes til รฅ skille mellom elementer som deler samme navn. Uten filtre, Selenium ville som standard kun bruke det fรธrste samsvarende elementet.
Target Format: navn=navn_pรฅ_elementet filter=verdi_av_filter
La oss gรฅ gjennom et eksempel.
Trinn 1) Logg inn pรฅ Mercury Turer.
Logg inn pรฅ Mercury Turer som bruker ยซveiledningยป som bรฅde brukernavn og passord. Siden Flysรธk skal vises, som vist nedenfor.
Trinn 2) Bruk utviklerverktรธy til รฅ inspisere VALUE-attributtene.
Legg merke til at alternativknappene for tur/retur og enveisreise deler samme navn, ยซtripTypeยป. De har imidlertid forskjellige VALUE-attributter, sรฅ vi kan bruke hver verdi som et filter.
Trinn 3) Klikk pรฅ den fรธrste raden i redigeringsprogrammet.
- Vi skal fรธrst รฅpne Enveis-radioknappen. Klikk pรฅ den fรธrste linjen i Selenium IDE-editor.
- I kommandoboksen skriver du inn kommandoen ยซklikkยป.
- pรฅ Target I boksen skriver du inn ยซnavn=reisetype verdi=enveisยป. Delen ยซverdi=enveisยป fungerer som filter.
Trinn 4) Klikk pรฅ Finn-knappen.
Legg merke til det Selenium IDE uthever alternativknappen Enveis i grรธnt, som bekrefter at elementet har blitt รฅpnet via VALUE-attributtet.
Trinn 5) Velg Enveiskjรธrt-radioknappen.
Trykk pรฅ ยซXยป-tasten pรฅ tastaturet for รฅ utfรธre klikkkommandoen. Radioknappen Enveis er nรฅ valgt.
Du kan utfรธre den samme handlingen pรฅ alternativknappen Rundtur, denne gangen med ยซnavn=turtype verdi=runtturยป som mรฅl.
Lokalisering etter lenketekst
Denne lokaliseringsstrategien gjelder kun for hyperkoblingstekster. Vi fรฅr tilgang til lenken ved รฅ sette prefikset ยซlink=" etterfulgt av den synlige hyperkoblingsteksten foran mรฅlet. Denne metoden er lettlest og fungerer bra for navigasjonstesting.
Target Format: link=link_tekst
I det fรธlgende eksemplet skal vi bruke ยซREGISTRERยป-lenken som finnes pรฅ Mercury Turens hjemmeside.
Trinn 1)
- Fรธrst mรฅ du sรธrge for at du er logget ut av Mercury Turer.
- Naviger til Mercury Turens hjemmeside.
Trinn 2)
- Bruk utviklerverktรธyene til รฅ inspisere ยซREGISTRERยป-lenken. Lenketeksten vises mellom den fรธrste og den avsluttende ankertaggen.
- I dette tilfellet er lenketeksten ยซREGISTRERยป. Kopier lenketeksten.
Trinn 3) Kopier lenketeksten og lim den inn i Selenium IDE Target eske. Prefiks det med "link =".
Trinn 4) Klikk pรฅ Finn-knappen. Selenium IDE vil utheve REGISTER-lenken riktig.
Trinn 5) For รฅ bekrefte ytterligere, skriv inn "clickAndWait" i kommandoboksen og utfรธr den. Selenium IDE vil klikke pรฅ REGISTRER-lenken og ta deg til registreringssiden som vises nedenfor.
Lokalisering etter DOM (Document Object Model)
Ocuco Dokumentobjektmodell (DOM)beskriver enkelt sagt hvordan HTML-elementer er strukturert som et tre av noder. Selenium IDE kan navigere i dette treet for รฅ fรฅ tilgang til sideelementer. Nรฅr du bruker denne metoden, Target Boksen begynner alltid med ยซdom=dokumentโฆยป. Prefikset ยซdom=ยป utelates vanligvis fordi Selenium IDE tolker automatisk enhver verdi som begynner med ยซdokumentยป som en DOM-sti.
Det finnes fire grunnleggende mรฅter รฅ finne et element gjennom DOM-en pรฅ. Selenium:
- getElementById
- getElementsByName
- dom:navn (gjelder bare for elementer i en navngitt form)
- dom:indeks
Lokalisering etter DOM โ getElementById
La oss fรธrst utforske getElementById-metoden til DOM-en i SeleniumDenne metoden returnerer et enkelt element ved รฅ matche ID-attributtet.
syntax
document.getElementById("id of the element")
- Elementets id = verdien til ID-attributtet til elementet som skal รฅpnes. Denne verdien mรฅ alltid omsluttes av et par anfรธrselstegn.
Trinn 1) Bruk denne demosiden https://demo.guru99.com/test/facebook.htmlNaviger til den og bruk utviklerverktรธyene til รฅ sjekke avmerkingsboksen ยซHold meg pรฅloggetยป. Noter ID-en.
ID-en vi skal bruke er ยซpersist_boxยป.
Trinn 2) Open Selenium IDE og i Target I boksen skriver du inn document.getElementById(โpersist_boxโ), og klikker deretter pรฅ Sรธk. Selenium IDE vil finne avmerkingsboksen ยซHold meg pรฅloggetยป. Selv om den ikke kan markere innsiden av avmerkingsboksen, omgir den elementet med en lys grรธnn kant, som vist nedenfor.
Finner etter DOM โ getElementsByName
getElementById-metoden รฅpner bare ett element om gangen, nemlig elementet med den angitte ID-en. getElementsByName-metoden oppfรธrer seg annerledes. Den returnerer en matrise med elementer som deler det angitte navnet. Individuelle elementer รฅpnes ved hjelp av en numerisk indeks som starter pรฅ 0.
syntax
document.getElementsByName("name")[index]
- navn = navnet pรฅ elementet som definert av dets 'navn'-attributt
- index = et heltall som indikerer hvilket element i getElementsByNames array som skal brukes.
Trinn 1) Naviger til Mercury Turenes hjemmeside og logg inn med ยซtutorialยป som brukernavn og passord. Nettleseren vil laste inn Flight Finder-skjermen.
Trinn 2) Bruk utviklerverktรธyene til รฅ se pรฅ de tre alternativknappene nederst pรฅ siden (รธkonomiklasse, forretningsklasse og fรธrste klasse). Legg merke til at de alle deler samme navn, ยซservClassยป.
Trinn 3) La oss fรธrst รฅpne alternativknappen ยซรkonomiklasseยป. Av de tre alternativknappene vises dette elementet fรธrst, sรฅ indeksen er 0. I Selenium IDE, skriv inn document.getElementsByName(โservClassโ)[0] og klikk pรฅ Sรธk-knappen. Selenium IDE vil identifisere alternativknappen for รธkonomiklasse riktig.
Trinn 4) Endre indeksnummeret til 1, slik at Target blir document.getElementsByName(โservClassโ)[1]. Klikk pรฅ Sรธk-knappen, og Selenium IDE vil utheve alternativknappen ยซBusiness classยป som vist nedenfor.
Finner etter DOM โ dom:navn
Som nevnt tidligere, gjelder denne metoden bare hvis elementet du รฅpner finnes i et navngitt skjema. Lokaliseringsbanen begynner ved skjemaet og driller deretter ned til mรฅlelementet etter navn.
syntax
document.forms["name of the form"].elements["name of the element"]
- navn pรฅ skjemaet = verdien av navneattributtet til skjemataggen som inneholder elementet du รธnsker รฅ fรฅ tilgang til
- navnet pรฅ elementet = verdien av navneattributtet til elementet du รธnsker tilgang til
Trinn 1) naviger til Mercury Turens hjemmeside https://demo.guru99.com/test/newtours/ og bruk utviklerverktรธy til รฅ inspisere tekstboksen Brukernavn. Legg merke til at den finnes i et skjema som heter ยซhjemยป.
Trinn 2) In Selenium IDE, skriv inn document.forms[โhomeโ].elements[โuserNameโ] og klikk pรฅ Sรธk-knappen. Selenium IDE vil fรฅ tilgang til elementet.
Finner etter DOM โ dom:index
Denne metoden gjelder selv nรฅr elementet ikke er innenfor et navngitt skjema, fordi den bruker skjemaets indeks i stedet for navnet. Dette er nyttig for eldre sider eller automatisk genererte skjemaer der navngiving ikke er tilgjengelig.
syntax
document.forms[index of the form].elements[index of the element]
- skjemaets indeks = skjemaets indeksnummer (starter pรฅ 0) i forhold til hele siden
- indeksen til elementet = indeksnummeret (starter pรฅ 0) til elementet i forhold til formen som inneholder det
Vi fรฅr tilgang til tekstboksen ยซTelefonยป pรฅ Mercury Registreringsside for turer. Skjemaet pรฅ denne siden har verken et navn eller et ID-attributt, sรฅ det er et godt eksempel.
Trinn 1) Naviger til Mercury Registreringssiden for turer og sjekk tekstboksen Telefon. Legg merke til at det omkringliggende skjemaet verken har ID- eller navneattributter.
Trinn 2) Skriv inn document.forms[0].elements[3] i Selenium IDE Target og klikk pรฅ Finn-knappen. Selenium IDE vil fรฅ tilgang til tekstboksen Telefon pรฅ riktig mรฅte.
Trinn 3) Alternativt kan du bruke elementets navn i stedet for indeksen for samme resultat. Skriv inn document.forms[0].elements[โtelefonโ] i Target boksen. Tekstboksen Telefon vil fortsatt vรฆre uthevet.
Finner av XPath
XPath er spรธrresprรฅket som brukes til รฅ navigere i XML-noder (Extensible Markup Language). Fordi HTML kan betraktes som en implementering av XML, XPath kan ogsรฅ finne HTML-elementer. Det er en av de kraftigste lokaliseringsstrategiene i Selenium.
- Fordel: Den har tilgang til nesten alle elementer, inkludert de uten klasse-, navn- eller ID-attributter.
- Ulempe: Det er den mest komplekse lokaliseringsstrategien pรฅ grunn av dens mange regler og syntaksvariasjoner.
Moderne nettleserutviklerverktรธy kan generere XPath-uttrykk automatisk. I Chrome, Edge eller FirefoxHรธyreklikk pรฅ et element i Element-panelet og velg Kopier > Kopier XPath. I fรธlgende eksempel skal vi fรฅ tilgang til et bilde som ikke kan finnes ved hjelp av metodene som er omtalt tidligere.
Trinn 1) Naviger til Mercury Gรฅ til hjemmesiden for Tours og bruk utviklerverktรธy til รฅ inspisere det oransje rektangelet til hรธyre for den gule ยซLenkerยป-boksen, som vist nedenfor.
Trinn 2) Hรธyreklikk pรฅ elementets HTML-kode, og velg deretter alternativet ยซKopier XPathยป.
Trinn 3) In Selenium IDE, skriv inn en enkel skrรฅstrek ยซ/ยป i Target boksen, og lim deretter inn XPath-koden som ble kopiert i forrige trinn. Innfรธringen i Target boksen skal nรฅ begynne med to skrรฅstreker "//".
Trinn 4) Klikk pรฅ Finn-knappen. Selenium IDE vil utheve den oransje boksen, som vist nedenfor.
Hvorfor det er viktig รฅ velge riktig lokator
ร velge riktig lokaliseringsstrategi er en av de mest innflytelsesrike beslutningene i Selenium automatisering fordi det direkte pรฅvirker skriptstabilitet, utfรธrelseshastighet og langsiktige vedlikeholdskostnader. En dรฅrlig valgt lokator kan forรฅrsake ustabile tester, falske feil og hyppig omarbeiding nรฅr applikasjonens brukergrensesnitt endres. Rekkefรธlgen som anbefales av erfarne automatiseringsingeniรธrer er ID fรธrst, deretter Navn, etterfulgt av CSS-velger, Lenketekst og til slutt XPath.
ID-baserte sรธknader er de raskeste fordi nettleserens oppslag er optimalisert for unike identifikatorer. Navnebaserte sรธknader er nesten like effektive nรฅr navn er unike. CSS-selektorer og XPath gir fleksibilitet, men har en tendens til รฅ vรฆre tregere og mer skjรธre nรฅr utviklere omstrukturerer DOM-en. Lenketekst er utmerket for navigasjonslenker, men tilbyr begrenset gjenbruk.
Stabil automatisering er ogsรฅ avhengig av samarbeid med utviklere. Nรฅr testere ber om konsistente og meningsfulle ID-er eller data-*-attributter under kodegjennomganger, forbedres holdbarheten til locatorer betydelig. Unngรฅ รฅ stole pรฅ automatisk genererte ID-er (som de som produseres av rammeverk) fordi de kan endres mellom bygg. Ved รฅ prioritere lesbare, intensjonsdrevne locatorer kan team holde testsuiter vedlikeholdbare og redusere teknisk gjeld etter hvert som applikasjonen utvikler seg.
Beste praksis for รฅ skrive pรฅlitelige lokaliseringsverktรธy
Pรฅlitelige lokaliseringsinstrumenter er grunnlaget for en vedlikeholdbar Selenium testpakke. Fรธlgende fremgangsmรฅter bidrar til รฅ redusere skriptfeil, forbedre lesbarheten og gjรธre tester motstandsdyktige mot endringer i brukergrensesnittet.
- Foretrekk unike ID-er: Sjekk alltid etter et ID-attributt fรธrst. ID-er er ment รฅ vรฆre unike innenfor en side og er det mest effektive valget.
- Bruk semantisk navn og data-* attributter: Oppfordre utviklere til รฅ legge til stabile testattributter som data-testid eller data-qa. Disse forblir konsistente selv nรฅr CSS-klasser endres.
- Unngรฅ absolutt XPath: Absolutte stier som /html/body/div[2]/div[3]/span brytes lett. Bruk relative XPath-uttrykk med attributter som //input[@name='userName'].
- Kombiner attributter for presisjon: Nรฅr et enkelt attributt ikke er unikt, kombinerer du flere attributter (for eksempel //button[@type='submit' og @name='login']) for รฅ mรฅlrette mot riktig element.
- Bruk teksten klokt: Lokaliseringsverktรธy som er avhengige av synlig tekst kan brytes pรฅ tvers av sprรฅklokaliseringer. Bruk tekstbaserte lokaliseringsverktรธy bare nรฅr innholdet er stabilt og ensprรฅklig.
- Sentraliser lokatorer: Lagre lokatorer i en POM-klasse (Page Object Model), slik at oppdateringer kan gjรธres pรฅ ett sted i stedet for pรฅ tvers av mange testskript.
- Valider i utviklerverktรธy: Fรธr du legger til en locator i et skript, test den i nettleserkonsollen ved รฅ bruke $x(โ//xpathโ) for XPath eller document.querySelector for CSS for รฅ bekrefte at den returnerer nรธyaktig ett element.
- Unngรฅ indeksbaserte lokatorer nรฅr det er mulig: Indeksposisjoner som [3] avhenger av elementrekkefรธlgen. Selv smรฅ endringer i layouten kan forskyve indeksen og รธdelegge skriptet.
Ved รฅ bruke disse fremgangsmรฅtene konsekvent, lager automatiseringsingeniรธrer testpakker som skaleres pรฅ tvers av team og overlever hyppige UI-oppdateringer med minimalt vedlikehold.





























