CSS Selector in Selenium

โšก Chytrรฉ shrnutรญ

CSS Selector in Selenium je vรฝkonnรก strategie lokace, kterรก identifikuje prvky pomocรญ HTML tagลฏ, ID, tล™รญd, atributลฏ a vzorลฏ vnitล™nรญho textu. Tento zdroj vysvฤ›tluje kaลพdรฝ typ CSS selektoru s podrobnรฝmi pล™รญklady. Selenium SDI.

  • ๐Ÿ†” ล tรญtek a ID: Zkombinujte HTML tag s prefixem # pro cรญlenรญ na prvky, kterรฉ majรญ pล™esnฤ› jedineฤnรฝ atribut ID.
  • ๐ŸŽฏ ล tรญtek a tล™รญda: Pro vyhledรกnรญ prvkลฏ sdรญlejรญcรญch stejnou tล™รญdu CSS pouลพijte syntaxi teฤky (.), coลพ je uลพiteฤnรฉ pro opakovanรฉ komponenty uลพivatelskรฉho rozhranรญ.
  • ๐Ÿงฉ ล tรญtek a atribut: Pro identifikaci prvkลฏ pomocรญ nรกzvu, typu nebo libovolnรฉho vlastnรญho pรกru atributลฏ pouลพijte zรกvorky [attribute=value].
  • ๐Ÿชœ ล tรญtek, tล™รญda a atribut: Sklรกdรกnรญm vรญce podmรญnek se vylouฤรญ nejednoznaฤnost prvkลฏ, kterรฉ sdรญlejรญ nรกzvy tล™รญd i hodnoty atributลฏ.
  • ๐Ÿ”ค Shoda vnitล™nรญho textu: Pomocรญ vzoru :contains(โ€žtextโ€œ) mลฏลพete vyhledat popisky a prvky, kterรฝm chybรญ ID, nรกzvy nebo tล™รญdy.
  • (Tj. Nejlepลกรญ praxe: Upล™ednostลˆujte stabilnรญ ID pล™ed hluboce vnoล™enรฝmi selektory, abyste zachovali Selenium automatizaฤnรญ skripty odolnรฉ vลฏฤi zmฤ›nรกm v uลพivatelskรฉm rozhranรญ.

CSS Selector in Selenium

Co je CSS selektor v Selenium?

A CSS Selector in Selenium je ล™etฤ›zcovรฝ vzor, โ€‹โ€‹kterรฝ identifikuje webovรฝ prvek pomocรญ kombinace HTML tagu, ID, tล™รญdy a atributลฏ. CSS selektory jsou o nฤ›co pokroฤilejลกรญ neลพ vyhledรกvรกnรญ podle ID nebo nรกzvu, ale jsou nejoblรญbenฤ›jลกรญ strategiรญ mezi zkuลกenรฝmi uลพivateli. Selenium uลพivatelรฉ, protoลพe mohou dosรกhnout prvkลฏ, kterรฉ nemajรญ vลฏbec ลพรกdnรฝ atribut ID nebo Name.

Selektory CSS v Selenium se vyskytujรญ v mnoha podobรกch, ale tato pล™รญruฤka se zamฤ›ล™uje na pฤ›t nejbฤ›ลพnฤ›jลกรญch vzorลฏ pouลพรญvanรฝch v Selenium SDI:

  • Tag a ID
  • Znaฤka a tล™รญda
  • Znaฤka a atribut
  • Znaฤka, tล™รญda a atribut
  • Vnitล™nรญ text

Pล™i pouลพitรญ tรฉto strategie v Selenium IDE, vลพdy pล™edponou Target krabice s โ€žcss=โ€žjak je ukรกzรกno v kaลพdรฉm nรญลพe uvedenรฉm pล™รญkladu.โ€œ

Proฤ pouลพรญvat CSS selektory v Selenium?

Selektory CSS jsou preferovanou strategiรญ pro vyhledรกvรกnรญ pro mnoho Selenium automatizaฤnรญ inลพenรฝล™i, protoลพe vyvaลพujรญ rychlost, flexibilitu a ฤitelnost. Modernรญ webovรฉ aplikace ฤasto pouลพรญvajรญ dynamicky generovanรก ID nebo zcela odstraลˆujรญ atributy nรกzvu, takลพe selektory CSS jsou jedinรฝm spolehlivรฝm zpลฏsobem, jak cรญlit na konkrรฉtnรญ prvek na strรกnce.

Mezi hlavnรญ vรฝhody pouลพรญvรกnรญ CSS selektorลฏ patล™รญ:

  • Vรฝkon: Selektory CSS jsou zpracovรกvรกny nativnรญm enginem prohlรญลพeฤe, takลพe se provรกdฤ›jรญ rychleji neลพ ekvivalentnรญ vรฝrazy XPath, zejmรฉna ve starลกรญch prohlรญลพeฤรญch, jako je Internet Explorer.
  • Flexibilita: Kombinujรญ logiku tagลฏ, tล™รญd, atributลฏ a ฤรกsteฤnรฝch shod, coลพ testerลฏm umoลพลˆuje cรญlit na prvky, kterรฉ nemajรญ stabilnรญ ID.
  • ฤŒitelnost: Syntaxe odrรกลพรญ zpลฏsob, jakรฝm vรฝvojรกล™i jiลพ pรญลกรญ pravidla CSS, coลพ zkracuje dobu uฤenรญ jak pro QA inลพenรฝry, tak pro front-end tรฝmy.
  • Stabilita napล™รญฤ prohlรญลพeฤi: Selektory CSS se chovajรญ v celรฉm Chromu konzistentnฤ›, Firefox, Edge a Safari, coลพ sniลพuje poฤet selhรกnรญ nestabilnรญch testลฏ.

Tag a ID โ€“ CSS selektor

Tento pล™รญklad pouลพรญvรก textovรฉ pole E-mail na pล™ihlaลกovacรญ strรกnce Facebooku. Prvek mรก ID โ€že-mailโ€ža k nฤ›mu se jiลพ pล™istupovalo v sekci โ€žVyhledรกvรกnรญ podle IDโ€œ. Nynรญ je stejnรฝ prvek cรญlen pomocรญ Selenium Selektor CSS s atributem ID.

Syntax

css=tag#id

  • tag = HTML tag prvku, ke kterรฉmu se pล™istupuje
  • # = znak kล™รญลพku, kterรฝ musรญ bรฝt vลพdy pล™รญtomen pล™i pouลพitรญ Selenium CSS Selector s ID
  • id = ID prvku, ke kterรฉmu se pล™istupuje

Mฤ›jte na pamฤ›ti, ลพe pล™ed ID vลพdy pล™edchรกzรญ znak hash (#).

Krok 1) pล™ejdฤ›te na www.facebook.comPomocรญ nรกstrojลฏ DevTools ve vaลกem prohlรญลพeฤi (nebo starลกรญho nรกstroje, jako je Firebug) zkontrolujte textovรฉ pole โ€žE-mail nebo telefonโ€œ.

Vลกimnฤ›te si, ลพe HTML tag je โ€žvstupโ€ža jeho ID je โ€že-mailโ€ž. Kompletnรญ CSS selektor se tedy stรกvรก โ€žcss=vstup#email".

Tag a ID - CSS selektor v Selenium

Krok 2) Zadejte โ€žcss=vstup#email" do Target krabiฤka Selenium IDE a kliknฤ›te na tlaฤรญtko Najรญt. Selenium IDE zvรฝraznรญ odpovรญdajรญcรญ prvek na strรกnce.

Selenium Zvรฝraznฤ›nรญ pole E-mail v IDE pomocรญ tagu a ID

Tag a tล™รญda โ€“ CSS selektor

Selektor CSS v Selenium kterรฝ pouลพรญvรก HTML tag a nรกzev tล™รญdy, se ล™รญdรญ stejnou myลกlenkou jako tag a ID, ale znak kล™รญลพku nahrazuje teฤka (.).

Syntax

css=tag.class

  • tag = HTML tag prvku, ke kterรฉmu se pล™istupuje
  • . = teฤka, kterรก musรญ bรฝt vลพdy pล™รญtomna pล™i pouลพitรญ CSS selektoru s tล™รญdou
  • class = tล™รญda prvku, ke kterรฉmu se pล™istupuje

Krok 1) Otevล™รญt demo strรกnku https://demo.guru99.com/test/facebook.html a zkontrolujte textovรฉ pole โ€žE-mail nebo telefonโ€œ. Vลกimnฤ›te si, ลพe HTML tag je โ€žvstupโ€ža jeho tล™รญda je โ€žvstupnรญ text".

Tag a tล™รญda - CSS selektor v Selenium

Krok 2) In Selenium IDE, zadejte โ€žcss=input.inputtext"V Target a kliknฤ›te na Najรญt. Selenium IDE rozpoznรก textovรฉ pole E-mail nebo Telefon.

Selenium Vyhledรกvรกnรญ elementu v IDE podle tagu a tล™รญdy

Vezmฤ›te prosรญm na vฤ›domรญ, ลพe pokud vรญce prvkลฏ sdรญlรญ stejnou HTML znaฤku a tล™รญdu, je rozpoznรกn pouze prvnรญ odpovรญdajรญcรญ prvek ve zdrojovรฉm kรณdu. Prohlรฉdnฤ›te si textovรฉ pole Heslo na stejnรฉ strรกnce a vลกimnฤ›te si, ลพe sdรญlรญ stejnou tล™รญdu jako textovรฉ pole E-mail nebo Telefon.

Vรญce prvkลฏ sdรญlรญ stejnรฝ tag a tล™รญdu

Na pล™edchozรญm obrรกzku bylo zvรฝraznฤ›no pouze textovรฉ pole E-mail nebo Telefon, protoลพe se ve zdrojovรฉm kรณdu strรกnky zobrazuje jako prvnรญ.

Urฤenรญ poล™adรญ zdrojovรฉho kรณdu strรกnky Selenium zรกpas

Tag a atribut โ€“ CSS selektor

Tato strategie kombinuje HTML tag se specifickรฝm atributem patล™รญcรญm k prvku, ke kterรฉmu chcete pล™istupovat.

Syntax

css=tag[attribute=value]

  • tag = HTML tag prvku, ke kterรฉmu se pล™istupuje
  • [ a ] โ€‹โ€‹= hranatรฉ zรกvorky, kterรฉ obalujรญ atribut a jeho odpovรญdajรญcรญ hodnotu
  • attribute = atribut, kterรฝ se mรก pouลพรญt. Vyberte takovรฝ, kterรฝ je pro danรฝ element jedineฤnรฝ, napล™รญklad name nebo id.
  • hodnota = odpovรญdajรญcรญ hodnota zvolenรฉho atributu.

Krok 1) Pล™ejdฤ›te na Mercury Strรกnka s registracรญ na prohlรญdky https://demo.guru99.com/test/newtours/register.php a prohlรฉdnฤ›te si textovรฉ pole โ€žPล™รญjmenรญโ€œ. Vลกimnฤ›te si jeho HTML tagu (โ€žinputโ€œ) a atributu name (โ€žlastNameโ€œ).

ล tรญtek a atribut - CSS selektor v Selenium

Krok 2) In Selenium IDE, zadejte โ€žcss=input[name=lastName]"V Target a kliknฤ›te na Najรญt. Selenium IDE รบspฤ›ลกnฤ› vyhledรก pole Pล™รญjmenรญ.

Selenium IDE vyhledรกvรก pล™รญjmenรญ pomocรญ atributu

Pokud vรญce prvkลฏ sdรญlรญ stejnรฝ HTML tag a atribut, je rozpoznรกn pouze prvnรญ z nich. Chovรกnรญ je identickรฉ s vyhledรกvรกnรญm prvkลฏ se stejnou znaฤkou a tล™รญdou.

Tag, tล™รญda a atribut โ€“ CSS selektor

Syntax

css=tag.class[attribute=value]

  • tag = HTML tag prvku, ke kterรฉmu se pล™istupuje
  • . = teฤka, kterรก musรญ bรฝt vลพdy pล™รญtomna pล™i pouลพitรญ CSS selektoru s tล™รญdou
  • class = tล™รญda prvku, ke kterรฉmu se pล™istupuje
  • [ a ] โ€‹โ€‹= hranatรฉ zรกvorky, kterรฉ obalujรญ konkrรฉtnรญ atribut a jeho odpovรญdajรญcรญ hodnotu
  • attribute = atribut, kterรฝ se mรก pouลพรญt. Vyberte takovรฝ, kterรฝ je pro danรฝ element jedineฤnรฝ, napล™รญklad name nebo id.
  • hodnota = odpovรญdajรญcรญ hodnota zvolenรฉho atributu.

Krok 1) Otevล™รญt demo strรกnku https://demo.guru99.com/test/facebook.html a zkontrolujte vstupnรญ pole โ€žE-mail nebo telefonโ€œ a โ€žHesloโ€œ. Vลกimnฤ›te si jejich HTML tagu, tล™รญdy a atributลฏ. Tento pล™รญklad pouลพรญvรก โ€žtabindexatribut โ€žโ€œ.

Tag, class a atribut - CSS Selector

Krok 2) Nejprve otevล™ete textovรฉ pole โ€žE-mail nebo telefonโ€œ s hodnotou tabindex 1. Zadejte โ€žcss=input.inputtext[tabindex=1]โ€œDo Selenium IDE Target a kliknฤ›te na Najรญt. Pole E-mail nebo Telefon se zvรฝraznรญ.

Selenium Vyhledรกvรกnรญ e-mailลฏ v IDE podle tagu, tล™รญdy nebo atributu

Krok 3) Chcete-li cรญlit na pole pro zadรกnรญ hesla, jednoduลกe nahraฤte hodnotu tabindex. Zadejte โ€žcss=input.inputtext[tabindex=2]"V Target a kliknฤ›te na Najรญt. Selenium IDE รบspฤ›ลกnฤ› vyhledรก textovรฉ pole Heslo.

Selenium Vyhledรกvรกnรญ hesla v IDE podle tagu, tล™รญdy, atributu

Vnitล™nรญ text โ€“ CSS selektor

HTML ลกtรญtky zล™รญdka dostรกvajรญ atributy id, name nebo class. Jak k nim tedy pล™istupujete v SeleniumOdpovฤ›ฤ spoฤรญvรก v jejich vnitล™nรญm textu. Vnitล™nรญ texty jsou skuteฤnรฉ ล™etฤ›zcovรฉ vzory, kterรฉ HTML popisek zobrazuje na strรกnce.

Syntax

css=tag:contains("inner text")

  • tag = HTML tag prvku, ke kterรฉmu se pล™istupuje
  • vnitล™nรญ text = viditelnรฝ textovรฝ obsah elementu

Krok 1) Pล™ejdฤ›te na Mercury Domovskรก strรกnka prohlรญdek https://demo.guru99.com/test/newtours/ a prohlรฉdnฤ›te si ลกtรญtek โ€žHesloโ€œ. Vลกimnฤ›te si jeho HTML tagu (โ€žv tomto pล™รญpadฤ› fontโ€œ) a vลกimnฤ›te si, ลพe element nemรก ลพรกdnรฉ atributy class, id ani name.

Vnitล™nรญ text - Inspekce CSS selektoru

Krok 2) Typ css=font:contains(โ€œHeslo:โ€) do Selenium IDE Target a kliknฤ›te na Najรญt. Selenium IDE vyhledรก popisek hesla, jak je znรกzornฤ›no nรญลพe.

Selenium Vyhledรกvรกnรญ hesla v IDE podle vnitล™nรญho textu

Krok 3) Tentokrรกt nahraฤte vnitล™nรญ text slovem โ€žBostonโ€œ, aby Target stรกvรก se โ€žcss=font:contains(โ€žBostonโ€œ)โ€ž. Kliknฤ›te na Najรญt. ล tรญtek โ€žBoston do San Franciscaโ€œ je zvรฝraznฤ›n, coลพ ukazuje, ลพe Selenium IDE dokรกลพe najรญt dlouhรฝ popisek, i kdyลพ je zadรกno pouze prvnรญ slovo jeho vnitล™nรญho textu.

Selenium ฤŒรกsteฤnรก shoda vnitล™nรญho textu v IDE

CSS selektor vs. XPath v Selenium

Selektory CSS i XPath se pouลพรญvajรญ k identifikaci webovรฝch prvkลฏ v Selenium, pล™esto majรญ rลฏznรฉ silnรฉ strรกnky. Nรญลพe uvedenรก tabulka porovnรกvรก obฤ› strategie lokalizace v klรญฤovรฝch dimenzรญch:

Kritรฉria Selektor CSS XPath
Rychlost Rychlejลกรญ, bฤ›ลพรญ na nativnรญm enginu prohlรญลพeฤe Pomalejลกรญ, zejmรฉna ve starลกรญch prohlรญลพeฤรญch
Vedenรญ Pouze pล™eposรญlรกnรญ (od nadล™azenรฉho k podล™รญzenรฉmu) Vpล™ed a vzad (od dรญtฤ›te k rodiฤi)
Syntax Kratลกรญ a podobnรก pravidlลฏm CSS Delลกรญ, hierarchickรฉ vรฝrazy cest
Shoda textu Omezeno na pseudotล™รญdu :contains() Silnรฉ funkce text() a contains()
Nejlepลกรญ pro Statickรฉ rozvrลพenรญ a modernรญ webovรฉ aplikace Komplexnรญ prochรกzenรญ DOM a textovรฉ lokรกtory

Nejlepลกรญ postupy pro psanรญ CSS selektorลฏ v Selenium

Psanรญ spolehlivรฝch CSS selektorลฏ jde nad rรกmec znalosti syntaxe. Nรกsledujรญcรญ postupy pomรกhajรญ testerลฏm vytvรกล™et stabilnรญ a snadno udrลพovatelnรฉ Selenium skripty, kterรฉ pล™eลพijรญ zmฤ›ny uลพivatelskรฉho rozhranรญ:

  1. Preferujte jedineฤnรฉ atributy: Vลพdy vyberte atributy id, data-test-id nebo name, kterรฉ jsou explicitnฤ› pล™idรกny pro automatizaci. Tyto atributy zลฏstรกvajรญ stabilnรญ i pล™i zmฤ›nฤ› vizuรกlnรญho rozvrลพenรญ.
  2. Vyhnฤ›te se pล™รญliลก vnoล™enรฝm selektorลฏm: Dlouhรฉ ล™etฤ›zce, jako napล™. div > div > ul > li > a snadno se zlomรญ, kdyลพ vรฝvojรกล™i refaktorujรญ znaฤkovรกnรญ. Udrลพujte selektory co nejkratลกรญ.
  3. Pouลพรญvejte ฤรกsteฤnรฉ shody moudล™e: Vzory jako napล™รญklad [class*="btn-primary"] tolerujรญ malรฉ zmฤ›ny nรกzvลฏ tล™รญd, ale mohou takรฉ odpovรญdat nezamรฝลกlenรฝm prvkลฏm.
  4. Vyhnฤ›te se lokรกtorลฏm zaloลพenรฝm na indexech: Selektori jako nth-child(3) jsou kล™ehkรฉ, protoลพe pล™idรกnรญ sourozeneckรฉho prvku posune kaลพdou pozici.
  5. Ovฤ›ล™enรญ selektorลฏ v DevTools: Pล™ed spuลกtฤ›nรญm a Selenium skript, vloลพte selektor do konzole Chrome DevTools pomocรญ document.querySelector() pro potvrzenรญ, ลพe vracรญ pล™esnฤ› jeden prvek.
  6. Kombinujte atributy pro jedineฤnost: Pokud je tล™รญda sdรญlena mnoha prvky, pล™idejte filtr atributลฏ, napล™รญklad input.form-control[name="email"] aby se cรญl jednoznaฤnฤ› vyjasnil.
  7. Dokumentace a opฤ›tovnรฉ pouลพitรญ: Centralizujte selektory uvnitล™ tล™รญdy Page Object tak, aby jedna aktualizace opravila kaลพdรฝ test, kterรฝ odkazuje na stejnรฝ prvek.

Dodrลพovรกnรญ tฤ›chto pokynลฏ sniลพuje nestรกlost, zvyลกuje rychlost provรกdฤ›nรญ testลฏ a usnadลˆuje... Selenium apartmรกny se ฤasem snadnฤ›ji udrลพujรญ.

Shrnutรญ: Struฤnรฝ pล™ehled syntaxe selektorลฏ CSS

Nรญลพe uvedenรก tabulka shrnuje vลกechny Selenium Vzor selektoru CSS popsanรฝ v tรฉto pล™รญruฤce:

Metoda Target Syntax Pล™รญklad
Tag a ID css=tag#id css=vstup#email
Znaฤka a tล™รญda css=tag.class css=input.inputtext
Znaฤka a atribut css=tag[attribute=value] css=input[name=lastName]
Znaฤka, tล™รญda a atribut css=tag.class[attribute=value] css=input.inputtext[tabindex=1]
Vnitล™nรญ text css=tag:obsahuje(โ€žtextโ€œ) css=font:contains(โ€œHeslo:โ€)

Nejฤastฤ›jลกรญ dotazy

Ano. Selektory CSS se obecnฤ› spouลกtฤ›jรญ rychleji neลพ XPath, protoลพe prohlรญลพeฤe zpracovรกvajรญ pravidla CSS nativnฤ›. Rozdรญl je nejpatrnฤ›jลกรญ ve starลกรญch verzรญch Internet Exploreru, zatรญmco modernรญ prohlรญลพeฤe jako Chrome a Firefox zmenลกit mezeru.

Ano. CSS selektory napsanรฉ pro Selenium IDE pracuje pล™รญmo v Selenium WebDriver prostล™ednictvรญm By.cssSelector()Jedinรฝ rozdรญl je v tom, ลพe WebDriver nevyลพaduje prefix โ€žcss="โ€œ, protoลพe typ lokรกtoru je urฤen samotnou metodou.

Ne. Firebug byl ukonฤen v roce 2017 po slouฤenรญ s Firefox Nรกstroje pro vรฝvojรกล™e. Dnes testeล™i pouลพรญvajรญ vestavฤ›nรฉ nรกstroje DevTools v Chromu, Firefoxnebo Edge pro kontrolu prvkลฏ a ovฤ›ล™enรญ CSS selektorลฏ pล™ed jejich pล™idรกnรญm do Selenium skripty.

Ano. Nรกstroje pohรกnฤ›nรฉ umฤ›lou inteligencรญ, jako napล™รญklad Testim, Mabl a ChatGPT mohou navrhovat CSS selektory analรฝzou DOMu. Sniลพujรญ nรกroฤnost รบdrลพby tรญm, ลพe selektory upravujรญ, kdyลพ vรฝvojรกล™i pล™ejmenovรกvajรญ tล™รญdy nebo restrukturalizujรญ strรกnku.

Samoopravnรฉ enginy ล™รญzenรฉ umฤ›lou inteligencรญ analyzujรญ okolnรญ DOM a automaticky se zotavujรญ z poลกkozenรฝch lokรกtorลฏ. Kdyลพ selektor CSS selลพe, engine identifikuje nejbliลพลกรญ odpovรญdajรญcรญ prvek pomocรญ podobnosti atributลฏ, textovรฉho obsahu a historickรฝch vzorลฏ, ฤรญmลพ obnovรญ stabilitu testu.

Pouลพรญvejte vzory ฤรกsteฤnรฉ shody, jako napล™รญklad [id^="user_"] pro pล™edpony, [id$="_btn"] pro pล™รญpony, nebo [id*="cart"] pro podล™etฤ›zce. Tyto vzory porovnรกvajรญ dynamicky generovanรก ID bez nutnosti pล™esnรฉ hodnoty.

Selektory CSS nemohou pล™echรกzet vzhลฏru od podล™รญzenรฉho prvku k jeho nadล™azenรฉmu a nabรญzejรญ omezenou podporu pro porovnรกvรกnรญ textu. Pro tyto scรฉnรกล™e zลฏstรกvรก XPath lepลกรญ volbou. CSS takรฉ postrรกdรก vestavฤ›nรฉ funkce pro logiku sourozencลฏ nad rรกmec sousednรญch a obecnรฝch sourozencลฏ.

Otevล™ete DevTools v prohlรญลพeฤi, pล™epnฤ›te na kartu Konzole a spusลฅte document.querySelectorAll("your-selector")Vrรกcenรฝ NodeList zobrazuje vลกechny odpovรญdajรญcรญ prvky. Spolehlivรฝ Selenium Lokรกtor by mฤ›l vracet pล™esnฤ› jeden prvek pro jedineฤnรฉ cรญlenรญ.

Shrลˆte tento pล™รญspฤ›vek takto: