CSS-vælger i Selenium
⚡ Smart opsummering
CSS-vælger i Selenium er en effektiv lokaliseringsstrategi, der identificerer elementer ved hjælp af HTML-tags, ID'er, klasser, attributter og indre tekstmønstre. Denne ressource forklarer alle CSS-selektortyper med trinvise eksempler på Selenium SDI.

Hvad er en CSS-selektor i Selenium?
A CSS-vælger i Selenium er et strengmønster, der identificerer et webelement gennem en kombination af HTML-tag, id, klasse og attributter. CSS-selektorer er lidt mere avancerede end at finde efter ID eller navn, men de er den mest populære strategi blandt erfarne Selenium brugere, fordi de kan nå elementer, der slet ikke har nogen ID- eller navneattribut.
CSS-vælgere i Selenium findes i mange former, men denne guide fokuserer på de fem mest almindelige mønstre, der bruges i Selenium SDI:
- Tag og ID
- Tag og klasse
- Tag og attribut
- Tag, klasse og attribut
- Indre tekst
Når man bruger denne strategi i Selenium IDE, altid præfiks for Target boks med "css=" som vist i hvert eksempel nedenfor.
Hvorfor bruge CSS-selektorer i Selenium?
CSS-selektorer er den foretrukne lokationsstrategi for mange Selenium automatiseringsingeniører, fordi de balancerer hastighed, fleksibilitet og læsbarhed. Moderne webapplikationer bruger ofte dynamisk genererede ID'er eller fjerner navneattributter helt, hvilket efterlader CSS-selektorer som den eneste pålidelige måde at målrette mod et specifikt element på siden.
De vigtigste fordele ved at bruge CSS-selektorer inkluderer:
- Ydelse: CSS-selektorer behandles af browserens native motor, så de udføres hurtigere end tilsvarende XPath-udtryk, især i ældre browsere som f.eks. Internet Explorer.
- Fleksibilitet: De kombinerer tag, klasse, attribut og delvis match-logik, hvilket giver testere mulighed for at målrette elementer, der mangler et stabilt ID.
- Læsbarhed: Syntaksen afspejler den måde, udviklere allerede skriver CSS-regler på, hvilket forkorter læringskurven for både QA-ingeniører og front-end-teams.
- Stabilitet på tværs af browsere: CSS-vælgere fungerer ensartet på tværs af Chrome, Firefox, Edge og Safari, hvilket reducerer ustabile testfejl.
Tag og ID – CSS-vælger
Dette eksempel bruger tekstfeltet E-mail på Facebooks loginside. Elementet har ID'et "e-mail", og det blev allerede tilgået i afsnittet "Lokering via ID". Nu målrettes det samme element ved hjælp af en Selenium CSS-vælger med ID-attributten.
Syntaks
css=tag#id
- tag = HTML-tagget for det element, der tilgås
- # = hashtegnet, som altid skal være til stede, når man bruger en Selenium CSS-vælger med ID
- id = ID'et for det element, der tilgås
Husk, at ID'et altid indledes med et hash-tegn (#).
Trin 1) Naviger til www.facebook.comBrug din browsers DevTools (eller et ældre værktøj som f.eks. Firebug) til at undersøge tekstfeltet "E-mail eller telefon".
Bemærk at HTML-tagget er "indgang" og dens ID er "e-mail". Den komplette CSS-vælger bliver derfor til "css=input#e-mail".
Trin 2) Gå ind "css=input#e-mail" ind i Target kasse med Selenium IDE og klik på knappen Find. Selenium IDE fremhæver det matchende element på siden.
Tag og klasse – CSS-vælger
En CSS-vælger i Selenium der bruger et HTML-tag og et klassenavn følger den samme idé som tag og ID, men et punktum (.) erstatter hashtegnet.
Syntaks
css=tag.class
- tag = HTML-tagget for det element, der tilgås
- . = punktumtegnet, som altid skal være til stede, når en CSS-selektor med klasse bruges
- klasse = klassen for det element, der tilgås
Trin 1) Åbn demosiden https://demo.guru99.com/test/facebook.html og undersøg tekstfeltet "E-mail eller telefon". Bemærk, at HTML-tagget er "indgang" og dens klasse er "inputtekst".
Trin 2) In Selenium IDE, indtast “css=input.inputtekst"I Target boksen og klik på Find. Selenium IDE genkender tekstfeltet E-mail eller Telefon.
Bemærk, at når flere elementer deler det samme HTML-tag og den samme klasse, genkendes kun det første matchende element i kildekoden. Undersøg tekstfeltet Adgangskode på samme side, og bemærk, at det deler samme klasse som tekstfeltet E-mail eller Telefon.
Kun tekstfeltet E-mail eller Telefon var fremhævet i den forrige illustration, fordi det vises først i sidekilden.
Tag og attribut – CSS-vælger
Denne strategi kombinerer et HTML-tag med en specifik attribut, der tilhører det element, du vil have adgang til.
Syntaks
css=tag[attribute=value]
- tag = HTML-tagget for det element, der tilgås
- [ og ] = firkantede parenteser, der omslutter attributten og dens tilsvarende værdi
- attribut = den attribut, der skal bruges. Vælg en, der er unik for elementet, f.eks. navn eller id.
- værdi = den tilsvarende værdi af den valgte attribut.
Trin 1) Naviger til Mercury Tilmeldingsside for ture https://demo.guru99.com/test/newtours/register.php og undersøg tekstfeltet "Efternavn". Bemærk HTML-tagget ("input") og navneattributten ("lastName").
Trin 2) In Selenium IDE, indtast “css=input[navn=efternavn]"I Target boksen og klik på Find. Selenium IDE har fundet feltet Efternavn.
Når flere elementer deler det samme HTML-tag og den samme attribut, genkendes kun det første. Opførslen er identisk med at finde elementer med samme tag og klasse.
Tag, klasse og attribut – CSS-vælger
Syntaks
css=tag.class[attribute=value]
- tag = HTML-tagget for det element, der tilgås
- . = punktumtegnet, som altid skal være til stede, når en CSS-selektor med klasse bruges
- klasse = klassen for det element, der tilgås
- [ og ] = firkantede parenteser, der omslutter en specifik attribut og dens tilsvarende værdi
- attribut = den attribut, der skal bruges. Vælg en, der er unik for elementet, f.eks. navn eller id.
- værdi = den tilsvarende værdi af den valgte attribut.
Trin 1) Åbn demosiden https://demo.guru99.com/test/facebook.html og undersøg inputfelterne "E-mail eller telefon" og "Adgangskode". Bemærk deres HTML-tag, klasse og attributter. Dette eksempel bruger "faneindeks"attributten."
Trin 2) Få adgang til tekstfeltet "E-mail eller telefon" først ved at bruge en tabindex-værdi på 1. Indtast "css=input.inputtekst[tabindex=1]" ind i Selenium IDE'er Target feltet og klik på Søg. Feltet E-mail eller Telefon er fremhævet.
Trin 3) For at målrette indtastningsfeltet Adgangskode skal du blot erstatte tabindex-værdien. Indtast “css=input.inputtekst[tabindex=2]"I Target boksen og klik på Find. Selenium IDE har fundet tekstfeltet Adgangskode.
Indre tekst – CSS-vælger
HTML-etiketter får sjældent id-, navn- eller klasseattributter. Så hvordan får du adgang til dem i SeleniumSvaret ligger gennem deres indre tekst. Indre tekster er de faktiske strengmønstre, som HTML-etiketten viser på siden.
Syntaks
css=tag:contains("inner text")
- tag = HTML-tagget for det element, der tilgås
- indre tekst = elementets synlige tekstindhold
Trin 1) Naviger til Mercury Tours hjemmeside https://demo.guru99.com/test/newtours/ og undersøg etiketten "Adgangskode". Bemærk dens HTML-tag ("font" i dette tilfælde), og observer, at elementet ikke har nogen klasse-, id- eller navneattributter.
Trin 2) Type css=font:contains(“Adgangskode:”) ind Selenium IDE'er Target boksen og klik på Find. Selenium IDE finder adgangskodemærkatet som vist nedenfor.
Trin 3) Denne gang skal du erstatte den indre tekst med "Boston", så Target bliver “css=font:indeholder(“Boston”)". Klik på Find. Etiketten "Boston til San Francisco" er fremhævet, hvilket viser, at Selenium IDE kan finde en lang etiket, selv når kun det første ord i dens indre tekst angives.
CSS-selektor vs. XPath i Selenium
Både CSS Selectors og XPath bruges til at identificere webelementer i Selenium, men de har forskellige styrker. Tabellen nedenfor sammenligner de to lokaliseringsstrategier på nøgledimensioner:
| Kriterier | CSS-vælger | XPath |
|---|---|---|
| Speed | Hurtigere, kører på browserens native motor | Langsommere, især i ældre browsere |
| Lederskab | Kun videresendelse (forælder til underordnet) | Frem og tilbage (barn til forælder) |
| Syntaks | Kortere og ligner CSS-regler | Længere, hierarkiske stiudtryk |
| Tekstmatchning | Begrænset til :contains() pseudoklasse | Stærke text()- og contains()-funktioner |
| Bedste for | Statiske layouts og moderne webapps | Kompleks DOM-traversering og tekstbaserede lokaliseringsværktøjer |
De bedste fremgangsmåder til at skrive CSS-selektorer i Selenium
At skrive pålidelige CSS-selektorer går ud over at kende syntaksen. Følgende fremgangsmåder hjælper testere med at skabe stabile, vedligeholdelige Selenium scripts, der overlever ændringer i brugergrænsefladen:
- Foretrækker unikke egenskaber: Vælg altid id-, data-test-id- eller name-attributter, der eksplicit tilføjes til automatisering. Disse forbliver stabile, selv når det visuelle layout ændres.
- Undgå overindlejrede selektorer: Lange kæder som f.eks.
div > div > ul > li > agår let i stykker, når udviklere omstrukturerer markup'en. Hold selektorerne så korte som muligt. - Brug delvise matches klogt: Mønstre som f.eks.
[class*="btn-primary"]tolererer små ændringer af klassenavne, men de kan også matche utilsigtede elementer. - Undgå indeksbaserede lokatorer: Udvælgere som
nth-child(3)er skrøbelige, fordi tilføjelse af et søskendeelement flytter alle positioner. - Valider selektorer i DevTools: Før du løber en Selenium script, indsæt vælgeren i Chrome DevTools-konsollen ved hjælp af
document.querySelector()for at bekræfte, at den returnerer præcis ét element. - Kombinér attributter for unikhed: Når en klasse deles af mange elementer, skal du tilføje et attributfilter, f.eks.
input.form-control[name="email"]at tydeliggøre målet. - Dokumentér og genbrug: Centraliser selektorer i en Page Object-klasse, så en enkelt opdatering retter hver test, der refererer til det samme element.
At følge disse retningslinjer reducerer ujævnheder, forbedrer testudførelseshastigheden og gør Selenium suiter nemmere at vedligeholde over tid.
Resumé: Hurtig reference til CSS-selektorsyntaks
Tabellen nedenfor konsoliderer alle Selenium CSS Selector-mønster dækket i denne vejledning:
| Metode | Target Syntaks | Eksempel |
|---|---|---|
| Tag og ID | css=tag#id | css=input#e-mail |
| Tag og klasse | css=tag.klasse | css=input.inputtekst |
| Tag og attribut | css=tag[attribut=værdi] | css=input[navn=efternavn] |
| Tag, klasse og attribut | css=tag.klasse[attribut=værdi] | css=input.inputtekst[tabindex=1] |
| Indre tekst | css=tag:indeholder(“tekst”) | css=font:contains(“Adgangskode:”) |














