CSS-velger i Selenium

โšก Smart oppsummering

CSS-velger i Selenium er en kraftig lokaliseringsstrategi som identifiserer elementer ved hjelp av HTML-tagger, ID-er, klasser, attributter og indre tekstmรธnstre. Denne ressursen forklarer alle CSS-selektortyper med trinnvise eksempler for Selenium SDI.

  • ๐Ÿ†” Tagg og ID: Kombiner en HTML-tag med #-prefikset for รฅ mรฅlrette elementer som har et unikt ID-attributt presist.
  • ๐ŸŽฏ Tagg og klasse: Bruk punktum (.)-syntaksen for รฅ finne elementer som deler en CSS-klasse, noe som er nyttig for gjentatte UI-komponenter.
  • ๐Ÿงฉ Tagg og attributt: Bruk [attributt=verdi]-parenteser for รฅ identifisere elementer gjennom navn, type eller et hvilket som helst tilpasset attributtpar.
  • ๐Ÿชœ Tagg, klasse og attributt: Stable flere betingelser for รฅ tydeliggjรธre elementer som deler bรฅde klassenavn og attributtverdier.
  • ๐Ÿ”ค Indre tekstmatch: Bruk :contains(โ€œtextโ€)-mรธnsteret for รฅ finne etiketter og elementer som mangler ID-er, navn eller klasser.
  • โœ… Beste praksis: Foretrekk stabile ID-er fremfor dypt nestede selektorer for รฅ beholde Selenium automatiseringsskript som er motstandsdyktige mot endringer i brukergrensesnittet.

CSS-velger i Selenium

Hva er en CSS-selektor i Selenium?

A CSS-velger i Selenium er et strengmรธnster som identifiserer et webelement gjennom en kombinasjon av HTML-tag, ID, klasse og attributter. CSS-selektorer er litt mer avanserte enn รฅ finne etter ID eller navn, men de er den mest populรฆre strategien blant erfarne Selenium brukere fordi de kan nรฅ elementer som ikke har noen ID- eller navneattributt i det hele tatt.

CSS-velgere i Selenium finnes i mange former, men denne veiledningen fokuserer pรฅ de fem vanligste mรธnstrene som brukes i Selenium ID:

  • Tag og ID
  • Tag og klasse
  • Tag og attributt
  • Tag, klasse og attributt
  • Indre tekst

Nรฅr du bruker denne strategien i Selenium IDE, alltid prefiks Target boks med ยซcss=ยซsom vist i alle eksemplene nedenfor.ยป

Hvorfor bruke CSS-selektorer i Selenium?

CSS-selektorer er den foretrukne locator-strategien for mange Selenium automatiseringsingeniรธrer fordi de balanserer hastighet, fleksibilitet og lesbarhet. Moderne webapplikasjoner bruker ofte dynamisk genererte ID-er eller fjerner navneattributter helt, noe som gjรธr at CSS-selektorer er den eneste pรฅlitelige mรฅten รฅ mรฅlrette mot et bestemt element pรฅ siden.

De viktigste fordelene med รฅ bruke CSS-selektorer inkluderer:

  • Ytelse: CSS-selektorer behandles av nettleserens innebygde motor, sรฅ de kjรธres raskere enn tilsvarende XPath-uttrykk, spesielt i eldre nettlesere som Internet Explorer.
  • Fleksibilitet: De kombinerer tagg, klasse, attributt og delvis samsvarslogikk, slik at testere kan mรฅlrette elementer som mangler en stabil ID.
  • lesbarhet: Syntaksen speiler mรฅten utviklere allerede skriver CSS-regler pรฅ, noe som forkorter lรฆringskurven for bรฅde QA-ingeniรธrer og front-end-team.
  • Stabilitet pรฅ tvers av nettlesere: CSS-selektorer oppfรธrer seg konsekvent pรฅ tvers av Chrome, Firefox, Edge og Safari, noe som reduserer ustabile testfeil.

Tagg og ID โ€“ CSS-velger

Dette eksemplet bruker tekstboksen E-post pรฅ Facebook-innloggingssiden. Elementet har en ID pรฅ ยซemaljeยซ, og den ble allerede รฅpnet i delen ยซLokalisering etter IDยป. Nรฅ mรฅlrettes det samme elementet ved hjelp av en Selenium CSS-velger med ID-attributtet.

syntax

css=tag#id

  • tag = HTML-koden til elementet som brukes
  • # = firkanttegnet, som alltid mรฅ vรฆre tilstede nรฅr man bruker en Selenium CSS-velger med ID
  • id = IDen til elementet som brukes

Husk at ID-en alltid innledes med et hash-tegn (#).

Trinn 1) naviger til www.facebook.comBruk nettleserens DevTools (eller et eldre verktรธy som Firebug) til รฅ se pรฅ tekstboksen ยซE-post eller telefonยป.

Legg merke til at HTML-taggen er ยซinngangยซ og ID-en er ยซemaljeยซ. Den komplette CSS-velgeren blir derfor ยซcss=input#e-post".

Tagg og ID - CSS-velger i Selenium

Trinn 2) Tast inn "css=input#e-post" inn i det Target eske med Selenium IDE og klikk pรฅ Finn-knappen. Selenium IDE fremhever det samsvarende elementet pรฅ siden.

Selenium IDE-utheving av e-postfelt via tagg og ID

Tagg og klasse โ€“ CSS-velger

En CSS-velger i Selenium som bruker en HTML-tag og et klassenavn fรธlger samme idรฉ som tag og ID, men et punktum (.) erstatter hash-tegnet.

syntax

css=tag.class

  • tag = HTML-koden til elementet som brukes
  • . = punktumtegnet, som alltid mรฅ vรฆre tilstede nรฅr man bruker en CSS-selektor med klasse
  • klasse = klassen til elementet som รฅpnes

Trinn 1) ร…pne demosiden https://demo.guru99.com/test/facebook.html og sjekk tekstboksen ยซE-post eller telefonยป. Merk at HTML-taggen er ยซinngang" og klassen er "inndatatekst".

Tagg og klasse - CSS-velger i Selenium

Trinn 2) In Selenium IDE, skriv inn ยซcss=input.inputtekst"I Target boksen og klikk Finn. Selenium IDE gjenkjenner tekstboksen E-post eller Telefon.

Selenium IDE-lokalisering av element etter tagg og klasse

Vรฆr oppmerksom pรฅ at nรฅr flere elementer deler samme HTML-tag og klasse, gjenkjennes bare det fรธrste samsvarende elementet i kildekoden. Undersรธk tekstboksen Passord pรฅ samme side, og legg merke til at den deler samme klasse som tekstboksen E-post eller Telefon.

Flere elementer som deler samme tagg og klasse

Bare tekstboksen E-post eller Telefon ble uthevet i den forrige illustrasjonen fordi den vises fรธrst i sidekilden.

Bestemmelse av rekkefรธlgen pรฅ sidens kilde Selenium kamp

Tagg og attributt โ€“ CSS-velger

Denne strategien kombinerer en HTML-tag med et spesifikt attributt som tilhรธrer elementet du vil ha tilgang til.

syntax

css=tag[attribute=value]

  • tag = HTML-koden til elementet som brukes
  • [ og ] = hakeparenteser som omslutter attributtet og den tilhรธrende verdien
  • attributt = attributtet som skal brukes. Velg et som er unikt for elementet, for eksempel navn eller id.
  • verdi = den tilsvarende verdien til det valgte attributtet.

Trinn 1) Naviger til Mercury Registreringsside for turer https://demo.guru99.com/test/newtours/register.php og sjekk tekstboksen ยซEtternavnยป. Legg merke til HTML-taggen (ยซinputยป) og navneattributtet (ยซlastNameยป).

Tagg og attributt - CSS-velger i Selenium

Trinn 2) In Selenium IDE, skriv inn ยซcss=input[navn=etternavn]"I Target boksen og klikk Finn. Selenium IDE finner feltet Etternavn.

Selenium IDE lokaliserer etternavn via attributt

Nรฅr flere elementer deler samme HTML-tag og attributt, gjenkjennes bare det fรธrste. Oppfรธrselen er identisk med รฅ finne elementer med samme tagg og klasse.

Tagg, klasse og attributt โ€“ CSS-velger

syntax

css=tag.class[attribute=value]

  • tag = HTML-koden til elementet som brukes
  • . = punktumtegnet, som alltid mรฅ vรฆre tilstede nรฅr man bruker en CSS-selektor med klasse
  • klasse = klassen til elementet som รฅpnes
  • [ og ] = hakeparenteser som omslutter et bestemt attributt og dets tilhรธrende verdi
  • attributt = attributtet som skal brukes. Velg et som er unikt for elementet, for eksempel navn eller id.
  • verdi = den tilsvarende verdien til det valgte attributtet.

Trinn 1) ร…pne demosiden https://demo.guru99.com/test/facebook.html og sjekk inndataboksene ยซE-post eller telefonยป og ยซPassordยป. Legg merke til HTML-koden, klassen og attributtene deres. Dette eksemplet bruker ยซtabindex"attributtet.

Tag, klasse og attributt - CSS-velger

Trinn 2) Gรฅ fรธrst til tekstboksen ยซE-post eller telefonยป ved รฅ bruke tabindeksverdien 1. Skriv inn ยซcss=input.inputtext[tabindex=1]โ€Inn i Selenium IDE-er Target boksen og klikk pรฅ Sรธk. Feltet E-post eller Telefon er uthevet.

Selenium IDE-lokalisering av e-post etter tagg, klasse, attributt

Trinn 3) For รฅ mรฅlrette Passord-inndataboksen, erstatt ganske enkelt tabindex-verdien. Skriv inn ยซcss=input.inputtext[tabindex=2]"I Target boksen og klikk Finn. Selenium IDE finner tekstboksen Passord.

Selenium IDE-sรธk etter passord etter tagg, klasse, attributt

Indre tekst โ€“ CSS-velger

HTML-etiketter fรฅr sjelden id-, navn- eller klasseattributter. Sรฅ hvordan fรฅr du tilgang til dem i SeleniumSvaret ligger gjennom deres indre tekst. Indre tekster er de faktiske strengmรธnstrene som HTML-etiketten viser pรฅ siden.

syntax

css=tag:contains("inner text")

  • tag = HTML-koden til elementet som brukes
  • indre tekst = det synlige tekstinnholdet i elementet

Trinn 1) Naviger til Mercury Turens hjemmeside https://demo.guru99.com/test/newtours/ og sjekk etiketten ยซPassordยป. Legg merke til HTML-taggen (ยซfontยป i dette tilfellet) og observer at elementet ikke har noen klasse-, id- eller navneattributter.

Indre tekst - CSS-selektorinspeksjon

Trinn 2) typen css=font:contains(โ€œPassord:โ€) inn Selenium IDE-er Target boksen og klikk Finn. Selenium IDE finner passordetiketten som vist nedenfor.

Selenium IDE lokaliserer passordetikett ved hjelp av indre tekst

Trinn 3) Denne gangen, erstatt den indre teksten med ยซBostonยป slik at Target blir ยซcss=font:contains(โ€œBostonโ€)Klikk pรฅ Finn. Etiketten ยซBoston til San Franciscoยป er uthevet, noe som viser at Selenium IDE kan finne en lang etikett selv om bare det fรธrste ordet i den indre teksten er oppgitt.

Selenium IDE delvis indre tekstsamsvar

CSS-velger kontra XPath i Selenium

Bรฅde CSS-selektorer og XPath brukes til รฅ identifisere webelementer i Selenium, men de har forskjellige styrker. Tabellen nedenfor sammenligner de to lokaliseringsstrategiene basert pรฅ viktige dimensjoner:

Kriterier CSS -velger XPath
Speed Raskere, kjรธrer pรฅ nettleserens innebygde motor Tregere, spesielt i eldre nettlesere
Lederskap Kun videresending (forelder til underordnet) Fremover og bakover (barn til forelder)
syntax Kortere og lik CSS-regler Lengre, hierarkiske baneuttrykk
Tekstmatching Begrenset til :contains() pseudoklasse Sterke tekst()- og inneholder()-funksjoner
Best for Statiske oppsett og moderne webapper Kompleks DOM-traversering og tekstbaserte lokaliseringsverktรธy

Beste praksis for รฅ skrive CSS-selektorer i Selenium

ร… skrive pรฅlitelige CSS-selektorer gรฅr utover รฅ kjenne syntaksen. Fรธlgende fremgangsmรฅter hjelper testere med รฅ lage stabile, vedlikeholdbare Selenium skript som overlever endringer i brukergrensesnittet:

  1. Foretrekk unike egenskaper: Velg alltid id-, data-test-id- eller name-attributter som er eksplisitt lagt til for automatisering. Disse forblir stabile selv nรฅr det visuelle oppsettet endres.
  2. Unngรฅ altfor nestede selektorer: Lange kjeder som f.eks. div > div > ul > li > a gรฅr lett i stykker nรฅr utviklere omstrukturerer markupen. Hold selektorene sรฅ korte som mulig.
  3. Bruk delvise treff klokt: Mรธnstre som [class*="btn-primary"] tolererer smรฅ endringer i klassenavn, men de kan ogsรฅ matche utilsiktede elementer.
  4. Unngรฅ indeksbaserte lokatorer: Utvelgere som nth-child(3) er skjรธre fordi det รฅ legge til et sรธskenelement endrer hver posisjon.
  5. Valider selektorer i DevTools: Fรธr du lรธper en Selenium skript, lim inn velgeren i Chrome DevTools-konsollen ved hjelp av document.querySelector() for รฅ bekrefte at den returnerer nรธyaktig ett element.
  6. Kombiner attributter for unikhet: Nรฅr en klasse deles av mange elementer, legg til et attributtfilter, for eksempel input.form-control[name="email"] รฅ tydeliggjรธre mรฅlet.
  7. Dokumenter og gjenbruk: Sentraliser selektorer i en Page Object-klasse slik at รฉn enkelt oppdatering fikser hver test som refererer til det samme elementet.

ร… fรธlge disse retningslinjene reduserer ujevnhet, forbedrer testutfรธrelseshastigheten og gjรธr Selenium suiter enklere รฅ vedlikeholde over tid.

Sammendrag: Hurtigreferanse for CSS-selektorsyntaks

Tabellen nedenfor konsoliderer alle Selenium CSS-selektormรธnster dekket i denne veiledningen:

Metode Target syntax Eksempel
Tag og ID css=tag#id css=input#e-post
Tag og klasse css=tag.klasse css=input.inputtekst
Tag og attributt css=tag[attribute=verdi] css=input[navn=etternavn]
Tag, klasse og attributt css=tag.class[attribute=verdi] css=input.inputtext[tabindex=1]
Indre tekst css=tag:inneholder(โ€œtekstโ€) css=font:contains(โ€œPassord:โ€)

Spรธrsmรฅl og svar

Ja. CSS-selektorer kjรธrer vanligvis raskere enn XPath fordi nettlesere behandler CSS-regler innebygd. Forskjellen er mest merkbar i eldre versjoner av Internet Explorer, mens moderne nettlesere som Chrome og Firefox begrense gapet.

Ja. CSS-selektorer skrevet for Selenium IDE fungerer direkte i Selenium WebDriver gjennom By.cssSelector()Den eneste forskjellen er at WebDriver ikke krever prefikset ยซcss=", siden locator-typen er spesifisert av selve metoden.

Nei. Firebug ble avviklet i 2017 etter รฅ ha blitt slรฅtt sammen med Firefox Utviklerverktรธy. I dag bruker testere de innebygde utviklerverktรธyene i Chrome, Firefox, eller Edge for รฅ inspisere elementer og validere CSS-selektorer fรธr de legges til Selenium skript.

Ja. AI-drevne verktรธy som Testim, Mabl og ChatGPT kan foreslรฅ CSS-selektorer ved รฅ analysere DOM-en. De reduserer vedlikeholdsarbeidet ved รฅ tilpasse selektorer nรฅr utviklere gir nytt navn til klasser eller omstrukturerer siden.

AI-drevne selvreparerende motorer analyserer den omkringliggende DOM-en og gjenoppretter automatisk fra รธdelagte locatorer. Nรฅr en CSS-selektor feiler, identifiserer motoren det nรฆrmest samsvarende elementet ved hjelp av attributtlikhet, tekstinnhold og historiske mรธnstre, og gjenoppretter dermed teststabilitet.

Bruk delvise samsvarsmรธnstre som [id^="user_"] for prefikser, [id$="_btn"] for suffikser, eller [id*="cart"] for delstrenger. Disse mรธnstrene samsvarer med dynamisk genererte ID-er uten รฅ kreve en nรธyaktig verdi.

CSS-selektorer kan ikke bevege seg oppover fra et underordnet element til det overordnede, og de tilbyr begrenset stรธtte for tekstmatching. For disse scenariene er XPath fortsatt det beste valget. CSS mangler ogsรฅ innebygde funksjoner for sรธskenlogikk utover tilstรธtende og generelle sรธsken.

ร…pne nettleserens DevTools, bytt til Konsoll-fanen og kjรธr document.querySelectorAll("your-selector")Den returnerte NodeList viser alle samsvarende elementer. En pรฅlitelig Selenium Lokatoren skal returnere nรธyaktig ett element for unik mรฅlretting.

Oppsummer dette innlegget med: