xpath functions dynamic xpath selenium
Acest tutorial explică utilizarea funcțiilor XPath în identificarea elementelor cu exemple:
Înainte de automatizarea oricărui site web este necesar să identificăm corect obiectul înainte de a putea efectua orice operație pe același. După cum știm, cel mai simplu mod de a identifica elementul este prin atribute precum ID, nume, link, clasă sau orice alt atribut unic disponibil cu eticheta în care se află elementul.
Acest lucru este posibil numai atunci când aceste atribute sunt prezente și / sau sunt unice, astfel încât obiectul să fie identificat corect.
=> Aruncați o privire la Ghidul pentru începători Selenium aici.
Ce veți învăța:
Prezentare generală a funcțiilor XPath
Să discutăm scenariul în care atributele nu sunt disponibile imediat.
Declarație problemă
Cum identificăm elementul dacă localizatorii precum ID, Nume, Clasă, Link etc. nu sunt disponibili în eticheta elementului?
Acest lucru poate fi înțeles clar cu exemplul dat:
Conectați la Stare de nervozitate
După cum puteți vedea în captura de ecran de mai sus, antetul „Conectați-vă la Twitter” nu are atribute atașate. Acestea fiind spuse, nu putem folosi niciunul dintre localizatori precum ID, Clasă, Link sau Nume pentru a identifica acest element.
cel mai bun instrument de captură de ecran pentru Windows 10
Pluginul Firepath al instrumentului Firefox a generat XPath de mai jos:
// * (@ id = ’page-container’) / div / div (1) / h1
Nu vă recomandăm utilizarea XPath-ului de mai sus ca structură a paginii sau ca id, deoarece se poate schimba dinamic. Dacă facem uz de acest XPath instabil, este posibil să trebuiască să schimbăm XPath mai frecvent, ceea ce consumă mai mult timp. Acesta este un caz în care nu putem folosi expresia generică XPath cu localizatori precum id, clasă, nume sau link.
Soluţie
Identificarea elementului folosind funcțiile XPath după text
Deoarece avem disponibil textul vizibil „Conectați-vă la Twitter”, vom folosi următoarele Funcții XPath pentru a identifica unic elementul.
- conține () (După text)
- începe-cu () (După text)
- text()
Funcțiile XPath cum ar fi conține (), începe cu () și text () atunci când sunt folosite cu ajutorul textului „Conectați-vă la Twitter” ne-ar ajuta să identificăm corect elementul, iar operațiunile ulterioare pot fi efectuate pe același.
# 1) Metoda Conține ():
Sintaxă: Pentru a găsi elementul web „Conectați-vă la Twitter”, utilizați oricare dintre următoarele expresii XPath care includ metoda contain ().
Prin text
- // h1 (conține (text (), „Conectați-vă la”))
- // h1 (conține (text (), „în Twitter”))
Notă: 1 nod care se potrivește indică faptul că elementul web a fost identificat cu succes.
Din exemplul de mai sus, este clar că metoda contain () nu are nevoie de textul absolut (complet) pentru a identifica corect elementul. Textul parțial este suficient pentru a-l identifica corect. Cu toate acestea, textul parțial selectat ar trebui să fie unic. Utilizatorul poate identifica cu ușurință elementul chiar dacă orientarea paginii este modificată cu ajutorul metodei contain ().
Vă rugăm să rețineți că, chiar dacă utilizați textul absolut „Conectați-vă la Twitter” cu metoda contain (), elementul ar fi identificat corect.
# 2) Metoda începe-cu ():
Sintaxă: Pentru a găsi elementul web „Conectați-vă la Twitter”, utilizați următoarele exemple de expresii XPath care au metoda starts-with ().
Prin text
- // h1 (începe-cu (text (), „Conectați-vă”))
- // h1 (începe-cu (text (), „Conectați-vă la”))
Din exemplul de mai sus, este clar că funcția XPath începe cu metoda () necesită cel puțin primul cuvânt („Jurnal”) al textului vizibil pentru a identifica în mod unic elementul. Funcționează și pe textul parțial și va eșua dacă nu includem primul cuvânt al textului parțial vizibil.
Vă rugăm să rețineți că, chiar dacă utilizați textul absolut „Conectați-vă la Twitter” cu metoda starts-with (), elementul va fi identificat corect.
XPath nevalid pentru începutul cu (): // h1 (începe-cu (text (), „în Twitter”))
Notă: Niciun nod care să se potrivească nu indică faptul că elementul web nu a fost identificat.
# 3) Metoda Text ():
Sintaxă: Pentru a găsi elementul web „Conectați-vă la Twitter”, utilizați următoarea expresie XPath care are metoda text ().
În această expresie, folosim textul absolut care este prezent între eticheta de pornire. Dacă folosim funcția text () cu Xpath parțial, așa cum facem în contain () și începe-cu (), nu am putea găsi elementul.
Xpath nevalid pentru text ():
Identificarea elementului folosind funcțiile XPath după atribut
Folosim funcțiile XPath (conține sau începe) cu atribut atunci când există câteva valori de atribut identificate unic disponibile în eticheta containerului. Atributele sunt accesate folosind simbolul „@”.
Acest lucru poate fi înțeles clar cu cele date exemplu:
Conectați la Google
# 1) Metoda Conține ():
Sintaxă: Pentru a identifica în mod unic elementul butonului „Mă simt norocos” cu ajutorul funcției XPath conține () cu ajutorul atributului.
(i) După atributul valorii:
- // intrare (conține (@ valoare, „Simțire”))
- // intrare (conține (@ valoare, „Norocos”))
Din imaginile de mai sus, se înțelege că utilizarea valorii atributului fie cu metoda „Feeling”, fie „Lucky” cu metoda contain () va identifica în mod unic elementul. Cu toate acestea, este important să rețineți că, chiar dacă folosim conținutul complet al atributului Value, acesta va identifica corect elementul.
(ii) După atributul Nume:
//input(contains(@name=’btnI’))
Cazul nevalid pentru funcția XPath cu atributul:
Trebuie să fim foarte atenți la selectarea atributului care urmează să fie utilizat cu metoda contain () și începe-cu (). Dacă valoarea atributului nu este unică, nu vom putea identifica în mod unic elementul.
Să presupunem că, dacă luăm atributul „tip” atunci când identificăm butonul „Mă simt norocos”, XPath nu va funcționa.
2 noduri potrivite indică faptul că elementul nu a fost identificat corect. Aici valoarea atributului de tip nu este unică.
# 2) Metoda începe-cu ():
Metoda starts-with () cu atributul este foarte utilă atunci când trebuie să găsim elementele a căror parte anterioară a atributului rămâne fixă în timp ce partea ulterioară continuă să se schimbe. Această abordare este foarte utilă atunci când obiectele își schimbă dinamic valoarea atributelor. Acest lucru poate fi folosit și dacă dorim să captăm tipuri similare de elemente.
Mergi la logare Facebook
Verificați prima casetă de text „Prenume” și a doua casetă de text „Prenume” din formularul de înscriere.
Este identificată prima casetă text „Prenume”.
A doua casetă text „Prenume” este identificată.
În ambele casete de text care sunt identificate pentru Înscrierea la Facebook, partea de pornire a atributelor id rămâne neschimbată.
Prenume id = „u_0_2”
Prenume id = ’u_0_4”
Acesta este scenariul în care putem folosi atributul starts-with () pentru a obține toate elementele sub un astfel de tip de atribut id. Vă rugăm să rețineți că luăm aceste două câmpuri doar ca referință. Cu toate acestea, ar putea exista mai multe câmpuri pe ecran cu ID-uri care încep cu „u_0_”.
Începe-cu () (După atributul id)
//input(starts-with(@id,”u_0_”))
Notă importantă: Aici am folosit ghilimele duble în loc de ghilimele simple. Dar ghilimelele simple vor funcționa și cu metoda start-with.
11 noduri potrivite indică faptul că acest XPath a identificat toate elementele pe care aceste ID-uri încep cu „u_0_”. Ultima parte a id-ului (2 pentru prenume, 4 pentru Prenume etc.) determină modul în care identificăm elementul în mod unic.
Putem folosi atributul funcției de pornire cu care trebuie să colectăm tipul similar de elemente dintr-o listă și să alegem dinamic unul dintre ele ocolind argumentul într-o metodă generică pentru a identifica în mod unic elementul.
Vă rugăm să urmați exemplul de mai jos pentru a utiliza funcția de pornire-în avantajul nostru.
Cod simplu:
/* Generic Method */ public void xpathLoc(String identifier){ //The below step identifies the element “First Name” uniquely when the argument is “2” WebElement E1=d1.findElement(By.xpath('//input(starts-with(@id,”u_0_”+identifier ))')); E1.sendKeys(“Test1”); /* This step enters the value of First Name as “Test 1” */ } /* Main Method */ public static void main(String() args) { xpathLoc(“2”); --- This step calls the xpathLoc() method to identify the first name. }
Notă: Este posibil ca Eclipse să nu permită utilizarea ghilimelelor duble. Este posibil să trebuiască să recurgeți la coduri diferite pentru a crea XPath dinamic.
Codul eșantion este dat pentru referință. Puteți să-l îmbunătățiți pentru a se încadra în toate elementele și operațiunile pe care doriți să le efectuați și valorile pe care doriți să le introduceți (în cazul câmpurilor de text) pentru a face codul mai versatil.
Concluzie
Acest articol a explicat cum putem folosi funcțiile XPath conține (), începe-cu () și text () cu atribut și text pentru a identifica în mod unic elementele din structura DOM HTML.
Mai jos sunt câteva dintre observațiile pe care le putem desena pentru funcțiile XPath:
- Folosiți metoda „conține ()” în XPath dacă cunoașteți textul sau atributul constant parțial vizibil.
- Folosiți metoda „starts-with ()” în XPath dacă cunoașteți textul sau atributul constant parțial inițial vizibil.
- De asemenea, puteți utiliza metoda contain () și starts-with () cu text sau atribut absolut.
- Folosiți metoda „text ()” în XPath dacă sunteți conștient de textul vizibil absolut.
- Nu puteți utiliza metoda text () cu textul parțial.
- Nu puteți utiliza metoda starts-with () dacă textul inițial nu este utilizat în XPath sau dacă textul inițial se schimbă constant.
În următorul tutorial, vom învăța cum să folosim Axele XPath cu funcțiile XPath pentru a îmbunătăți în continuare locația elementelor pe pagina web disponibilă.
=> Citiți seria Easy Training Selenium.
Lectură recomandată
- Localizatori de seleniu: Identificați elemente web folosind XPath în seleniu (exemple)
- Gestionarea tabelelor web, a cadrelor și a elementelor dinamice în scriptul Selenium - Tutorial Selenium # 18
- Funcții Python String
- Post-procesor Xpath Extractor în JMeter
- Tutorial Selenium Find Element By Text cu exemple
- Tutorial Castravete Seleniu: Integrare Castravete Java Seleniu WebDriver
- Un tutorial cuprinzător XPath - Limbajul căii XML
- Introducere în Selenium WebDriver - Tutorial Selenium # 8