Stăpânirea XPath în Selenium: Cum să localizați elementele

Inginerii de testare sunt esențiali în ciclul de viață al dezvoltării software, deoarece se asigură că o echipă oferă aplicații fără erori și funcționale. Acești ingineri trec aplicațiile prin diferite teste înainte de a putea fi livrate sau declarate gata pentru utilizatori.

Testatorii trebuie să fie pricepuți și capabili să localizeze și să interacționeze cu elementele web. Selenium este unul dintre cele mai utilizate instrumente de automatizare a testelor de către echipele moderne de dezvoltare. Acest instrument are patru componente; Selenium Grid, Selenium WebDriver, Selenium IDE și Selenium RC.

Concentrarea noastră astăzi se va concentra pe Selenium WebDriver, deoarece conține XPath. Acest articol va defini XPath, va discuta despre sintaxa XPath de bază și va ilustra cum să XPath în Selenium.

Ce este XPath

XPath( XML Path Language) este un limbaj de interogare pentru selectarea și navigarea atributelor și elementelor din documentele XML. XPath definește o expresie de cale, oferind o modalitate de a aborda anumite părți ale unui document XML și de a prelua informații din acesta.

Sintaxa sa seamănă cu calea unui sistem de fișiere. De asemenea, oferă funcții și simboluri care facilitează selectarea elementelor pe baza atributelor și ierarhiei acestora. Puteți utiliza XPath cu tehnologii precum XML, HTML și XSLT pentru a extrage și manipula date.

De ce să folosiți XPath?

  • Este flexibil: spre deosebire de selectoarele CSS care pot localiza elemente numai folosind numele etichetei, ID-ul sau clasa, XPath vă permite să localizați elemente folosind alte atribute.
  • Reutilizabil: vă puteți stoca XPath-ul în variabile și le puteți reutiliza în cod.
  • Selectare precisă a nodurilor: XPath oferă o modalitate standardizată de a viza anumite elemente dintr-un document web.

Sintaxa de bază a XPath

XPath vă permite să găsiți orice element pe o pagină web folosind DOM. Cu toate acestea, înainte de a verifica sintaxa, trebuie să înțelegem următoarele expresii XPath;

ExpressionDescriptionnodename/ tagnameSelectează toate nodurile cu numele „nodename”/ „tagname”/Selectează din nodul rădăcină// Selectează nodurile din documentul curent din nodul curent care se potrivesc cu selecția, indiferent de locul în care sunt@Selectează atributele..Selectează părintele lui nodul curent.Selectează nodul curent

  Cum să personalizați bara tactilă pe un MacBook Pro

Sintaxa standard pentru XPath este;

XPath=//tagname[@attribute="value"]

După cum puteți vedea, sintaxa începe cu o bară oblică dublă (//), care începe cu nodul curent, așa cum este definit de eticheta/numele nodului.

XPath absolut vs. XPath relativ

Avem două căi atunci când avem de-a face cu XPath; XPath absolut și XPath relativ;

XPath absolut

Un XPath absolut este o cale directă de la rădăcină la elementul dorit. Începeți cu nodul rădăcină și terminați cu nodul țintă.

Puteți avea un document HTML cu următorul conținut;

<!DOCTYPE html>
<html>
<head>
    <title>tipstrick.ro</title>
</head>
<body>
    <div>
        <h1>Welcome to tipstrick.ro</h1>
    </div>
</body>
</html>

Dacă dorim să localizăm elementul cu conținutul „Bine ați venit la tipstrick.ro”, veți urma această cale;

/html/body/div/h1

În documentul de mai sus, avem;

  • html ca nod rădăcină: /html
  • Corpul este un nod părinte: /html/body
  • Div-ul ca copil al nodului body: /html/body/div
  • H1 ca copil al nodului div: /html/body/div/h1

Pentru a obține elementul cel mai interior, trebuie să urmați acea cale.

Când să utilizați Absolute XPath

Absolute XPath urmează o cale „specifică”. Astfel, se va potrivi perfect atunci când aveți mai multe elemente cu atribute similare pe o pagină, asigurându-vă că vizați elementele exacte dintr-un document.

Cu toate acestea, XPath este prea sensibil la modificările din structura documentului HTML. Ca atare, o simplă schimbare îți poate distruge XPath-ul Absolut.

XPath relativă

XPath relativ începe de la orice nod și se termină cu nodul țintă. Această cale nu este afectată de modificările din document, ceea ce o face preferată în majoritatea cazurilor. Cu Relative XPath, puteți localiza elemente din orice parte a documentului. Expresia Relative XPath începe cu bare oblice duble „//”.

Dacă folosim documentul HTML, putem găsi H1-ul nostru care spune „Bine ați venit la tipstrick.ro”;

<!DOCTYPE html>
<html>
<head>
    <title>tipstrick.ro</title>
</head>
<body>
    <div>
        <h1>Welcome to tipstrick.ro</h1>
    </div>
</body>
</html>

XPath-ul nostru relativ la h1 va fi;

//body/div/h1

Când să utilizați Relative XPath

Ar trebui să utilizați Relative XPath atunci când căutați un echilibru între flexibilitate și specificitate. Această cale este rezistentă la modificările din documentul HTML, având în vedere că relația dintre elemente rămâne specifică.

Localizați elemente folosind XPath în Selenium

Selenium este un cadru open-source care permite utilizatorilor să automatizeze browserele web. Cadrul are o colecție de biblioteci și instrumente care îi ajută pe testeri să interacționeze automat și sistematic cu elementele web.

  Cum să remediați „Încredeți-vă în acest computer” care nu apare cu un iPhone

Presupunând că avem un document web care conține o listă de melodii, după cum urmează;

<!DOCTYPE html>
<html>
<head>
    <title>Song Library</title>
</head>
<body>
    <h1>Song Library</h1>
    <ul class="song-list">
        <li class="song" title="Song Title 1">Song 1 - Artist 1</li>
        <li class="song" title="Song Title 2">Song 2 - Artist 2</li>
        <li class="song" title="Song Title 3">Song 3 - Artist 1</li>
        <li class="song" title="Song Title 4">Song 4 - Artist 3</li>
    </ul>
</body>
</html>
  • Nodul nostru rădăcină este .
  • Avem ca nod părinte.
  • Avem

    drept copil al .

  • Avem
      ca un copil al .
    • Avem
    • ca un copil al lui
        .

      Putem folosi diferite locatoare XPath în documentul HTML de mai sus. De exemplu, putem localiza elemente după ID, nume, nume de clasă, conține, texte, se termină cu și începe cu, printre mulți alți localizatori. Puteți utiliza Selenium cu diferite limbaje de programare. Vom folosi Python pentru a demonstra.

      Localizați după index

      Presupunând că vrem să găsim melodia numărul 3, putem avea acest cod;

      third_song = driver.find_element_by_xpath("//li[@class="song"][3]")
      print("Third Song:", third_song.text)
      

      Am folosit Relative XPath și am început cu nodul „li”. Când Selenium localizează a treia melodie din lista noastră, își va imprima textul.

      Localizați după atribut

      Putem avea un XPath care caută toate melodiile de la „Artist 1” și le imprimă titlurile. Codul nostru poate fi după cum urmează;

      songs_by_artist1 = driver.find_elements_by_xpath("//li[contains(@class, 'song') and contains(text(), 'Artist 1')]")
      print("Songs by Artist 1:")
      for song in songs_by_artist1:
          print(song.text)
      

      Localizați după text

      Acest localizator vă ajută să găsiți elemente cu text specific. Putem căuta o melodie cu textul „Cântec 4” și să-i tipărim textul. Putem reprezenta acest localizator folosind acest cod;

      song_with_text = driver.find_element_by_xpath("//li[contains(text(), 'Song 4')]")
      print("Song with Text:", song_with_text.text)
      

      Axe XPath

      Abordările pe care le-am discutat până acum funcționează perfect cu pagini web simple. Cu toate acestea, există cazuri în care metodele de căutare a elementelor XPath, cum ar fi text, ID, Nume de clasă și Nume, nu vor funcționa.

      Axele XPath sunt folosite pentru conținut dinamic în care locatoarele normale nu funcționează. Aici, localizați elemente pe baza relației lor cu alte elemente. Acestea sunt câteva dintre locatoarele comune XPath Axes;

      Strămoş

      Metoda Ancestor Axis este perfectă pentru a trata documente XML cu elemente foarte imbricate. Puteți selecta toate elementele strămoși, cum ar fi bunicul și părintele nodului curent, de la cel mai apropiat la cel mai îndepărtat.

      Putem avea următorul cod;

      <bookstore>
        <book>
          <title>The Great Gatsby</title>
          <author>F. Scott Fitzgerald</author>
          <genre>Fiction</genre>
        </book>
        <book>
          <title>The Biggest Dilemma</title>
          <author>George Orwell</author>
          <genre>Dystopian</genre>
        </book>
      </bookstore>
      

      Dacă vrem să selectăm toți strămoșii elementului „titlu” pentru cartea „Cea mai mare dilemă”, putem avea această metodă Axa Strămoșilor;

      //title[text() = '1984']/ancestor::*

      Ca urmare a

      Metoda Following Axis localizează toate nodurile care postează eticheta de închidere a nodului curent. Această metodă nu ia în considerare ierarhia sau locația nodurilor țintă. De exemplu, dacă aveți un document XML sau o pagină web cu mai multe secțiuni, puteți identifica un element care apare după o anumită secțiune fără a naviga în întreaga structură arborescentă.

      Mamă

      Metoda Parent Axis din XPath selectează părintele nodului curent. Puteți utiliza următoarea cale pentru a localiza nodul părinte;

      //tag[@attribute="value"]/parent::tagName

      Această abordare funcționează atunci când elementele copil din nodul curent au atribute unice pe care le puteți localiza cu ușurință și doriți să verificați cu părintele.

      Copil

      Metoda Child Axis din XPath selectează toți copiii nodului curent. Rămâne una dintre cele mai populare metode XPath Axis, deoarece ajută la selectarea nodurilor secundare ale unui anumit element.

      Luați în considerare această bucată de cod;

      <section id='text'>
          <p>Paragraph one</p>
          <p>Paragraph two</p>
          <p>Paragraph three</p>
          <p>Paragraph four</p>
      </section>

      Putem localiza toate elementele „p” din codul nostru folosind această Axă;

      //section[@id='text']/child::p

      Întrebări frecvente

      De ce să folosiți XPath în loc de selectoare CSS?

      Selectorii CSS pot găsi elemente numai pe baza ID-ului lor, a numelui etichetei și a clasei. Pe de altă parte, puteți utiliza XPath pentru a localiza elemente pe baza locației lor, a conținutului textului și a altor atribute din structura HTML. De asemenea, puteți stoca expresii XPath în variabile și le puteți reutiliza în aplicația dvs.

      Ce limbi acceptă XPath în Selenium?

      Puteți utiliza XPath cu orice limbă care acceptă Selenium. Vă puteți scrie scripturile în JavaScript, Java, Python, Ruby, C# și PHP.

      Care sunt alternativele XPath?

      Puteți utiliza selectoare CSS, Recunoaștere a imaginii sau localizatoare încorporate ale Selenium ca alternativă la XPath. Selectoarele CSS sunt cele mai comune; puteți găsi elemente pe baza numelui, ID-ului sau clasei lor. Recunoașterea imaginilor vă permite să localizați elemente pe baza imaginilor lor. Localizatoarele încorporate ale lui Selenium sunt proiectate pentru a fi ușor de utilizat.

      Concluzie

      Acum puteți defini XPath în Selenium, puteți face diferența între XPath absolut și relativ și puteți localiza elemente folosind diferiți localizatori XPath. Alegerea locatorului va depinde de natura conținutului și de obiectivele dumneavoastră finale.

      Consultați articolul nostru despre întrebările interviului Selenium dacă doriți să obțineți succes în următorul interviu.