Zvládnutí XPath v Selenium: Jak najít prvky

Testovací inženýři jsou nezbytní v životním cyklu vývoje softwaru, protože zajišťují, že tým poskytuje bezchybné a fungující aplikace. Tito inženýři procházejí aplikace různými testy, než mohou být odeslány nebo prohlášeny za připravené pro uživatele.

Testeři by měli být zruční a schopni lokalizovat prvky webu a pracovat s nimi. Selenium je jedním z nejpoužívanějších nástrojů pro automatizaci testování moderními vývojovými týmy. Tento nástroj má čtyři součásti; Selenium Grid, Selenium WebDriver, Selenium IDE a Selenium RC.

Dnes se zaměříme na Selenium WebDriver, protože obsahuje XPath. Tento článek bude definovat XPath, diskutovat o základní syntaxi XPath a ilustrovat, jak XPath v Selenium.

Co je XPath

XPath ( XML Path Language ) je dotazovací jazyk pro výběr a procházení atributů a prvků v dokumentech XML. XPath definuje výraz cesty, který nabízí způsob, jak adresovat konkrétní části dokumentu XML a získat z něj informace.

Jeho syntaxe připomíná cestu k systému souborů. Obsahuje také funkce a symboly, které usnadňují výběr prvků na základě jejich atributů a hierarchie. XPath můžete použít s technologiemi jako XML, HTML a XSLT k extrahování a manipulaci s daty.

Proč používat XPath?

  • Je flexibilní: Na rozdíl od selektorů CSS, které mohou vyhledávat prvky pouze pomocí názvu značky, ID nebo třídy, XPath umožňuje vyhledávat prvky pomocí jiných atributů.
  • Opakovaně použitelné: XPath můžete uložit do proměnných a znovu je použít ve svém kódu.
  • Přesný výběr uzlů: XPath poskytuje standardizovaný způsob cílení na konkrétní prvky ve webovém dokumentu.

Základní syntaxe XPath

XPath vám umožňuje najít jakýkoli prvek na webové stránce pomocí DOM. Než však zkontrolujeme syntaxi, musíme porozumět následujícím výrazům XPath;

ExpressionDescriptionnodename/ tagnameVybere všechny uzly jméno ‚nodename’/ ‚tagname’/Vybere z kořenového uzlu// Vybere uzly v aktuálním dokumentu z aktuálního uzlu odpovídající výběru, bez ohledu na to, kde jsou @Vybere atributy..Vybere nadřazeného uzlu aktuální uzel. Vybere aktuální uzel

  Jak vytvořit a spravovat obsah v aplikaci Microsoft Word

Standardní syntaxe pro XPath je;

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

Jak můžete vidět, syntaxe začíná dvojitým lomítkem (//), které začíná aktuálním uzlem definovaným názvem tagu/uzlu.

Absolutní XPath vs. Relativní XPath

Při práci s XPath máme dvě cesty; Absolutní XPath a Relativní XPath;

Absolutní XPath

Absolutní XPath je přímá cesta od kořene k požadovanému prvku. Začínáte kořenovým uzlem a končíte cílovým uzlem.

Můžete mít dokument HTML s následujícím obsahem;

<!DOCTYPE html>
<html>
<head>
    <title>etechblog.cz</title>
</head>
<body>
    <div>
        <h1>Welcome to etechblog.cz</h1>
    </div>
</body>
</html>

Pokud chceme najít prvek s obsahem „Welcome to etechblog.cz“, budete postupovat touto cestou;

/html/body/div/h1

Ve výše uvedeném dokumentu máme;

  • html jako kořenový uzel: /html
  • Tělo je nadřazený uzel: /html/body
  • Div jako potomek uzlu těla: /html/body/div
  • H1 jako potomek uzlu div: /html/body/div/h1

Abyste získali nejvnitřnější prvek, musíte tuto cestu následovat.

Kdy použít Absolute XPath

Absolute XPath sleduje ‚specifickou‘ cestu. Bude se tedy perfektně hodit, když budete mít na stránce více prvků s podobnými atributy, což zajistí, že zacílíte na přesné prvky v dokumentu.

XPath je však příliš citlivý na změny ve struktuře dokumentu HTML. Jednoduchá změna jako taková může narušit vaši Absolutní XPath.

Relativní XPath

Relativní XPath začíná z libovolného uzlu a končí cílovým uzlem. Tato cesta není ovlivněna změnami v dokumentu, takže je ve většině případů vhodnější. Pomocí Relative XPath můžete najít prvky z libovolné části dokumentu. Relativní výraz XPath začíná dvojitými lomítky ‚//‘.

Pokud použijeme dokument HTML, můžeme najít náš H1, který říká „Welcome to etechblog.cz“;

<!DOCTYPE html>
<html>
<head>
    <title>etechblog.cz</title>
</head>
<body>
    <div>
        <h1>Welcome to etechblog.cz</h1>
    </div>
</body>
</html>

Naše relativní XPath k h1 bude;

//body/div/h1

Kdy použít relativní XPath

Při hledání rovnováhy mezi flexibilitou a specifičností byste měli použít Relative XPath. Tato cesta je odolná vůči změnám v dokumentu HTML, protože vztah mezi prvky zůstává specifický.

Vyhledejte prvky pomocí XPath v Selenium

Selenium je open-source framework, který uživatelům umožňuje automatizovat webové prohlížeče. Rámec obsahuje kolekci knihoven a nástrojů, které testerům pomáhají automaticky a systematicky interagovat s webovými prvky.

  Představení cloud computingu pro začátečníky

Za předpokladu, že máme webový dokument, který obsahuje následující seznam skladeb;

<!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>
  • Náš kořenový uzel je .
  • Jako nadřazený uzel máme .
  • Máme

    jako potomka .

  • Máme
      jako dítě .
    • Máme
    • jako dítě
        .

      Ve výše uvedeném dokumentu HTML můžeme použít různé lokátory XPath. Můžeme například vyhledávat prvky podle ID, názvu, názvu třídy, obsahu, textů, konce a začátku a mnoha dalších lokátorů. Selenium můžete používat s různými programovacími jazyky. K demonstraci použijeme Python.

      Vyhledejte podle indexu

      Za předpokladu, že chceme najít skladbu číslo 3, můžeme mít tento kód;

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

      Použili jsme Relative XPath a začali jsme s uzlem ‚li‘. Když Selenium najde třetí skladbu na našem seznamu, vytiskne její text.

      Vyhledejte podle atributu

      Můžeme mít XPath, která vyhledá všechny písně z „Artist 1“ a vytiskne jejich názvy. Náš kód může být následující;

      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)
      

      Vyhledejte podle textu

      Tento lokátor vám pomůže najít prvky s konkrétním textem. Můžeme vyhledat skladbu s textem „Song 4“ a vytisknout její text. Tento lokátor můžeme reprezentovat pomocí tohoto kódu;

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

      osy XPath

      Přístupy, o kterých jsme dosud hovořili, perfektně fungují s jednoduchými webovými stránkami. Existují však případy, kdy metody vyhledávání prvků XPath jako podle textu, ID, názvu třídy a názvu nebudou fungovat.

      Osy XPath se používají pro dynamický obsah, kde normální lokátory nefungují. Zde najdete prvky na základě jejich vztahu s jinými prvky. Toto jsou některé z běžných lokátorů XPath Axes;

      Předek

      Metoda Ancestor Axis je ideální pro práci s dokumenty XML s vysoce vnořenými prvky. Můžete vybrat všechny prvky předka, jako je prarodič a rodič aktuálního uzlu, od nejbližšího po nejvzdálenější.

      Můžeme mít následující kód;

      <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>
      

      Pokud chceme vybrat všechny předky prvku ‚title‘ pro knihu „Největší dilema“, můžeme použít metodu Ancestor Axis;

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

      Následující

      Metoda Follow Axis vyhledá všechny uzly umístěné za uzavírací značkou aktuálního uzlu. Tato metoda nebere v úvahu hierarchii nebo umístění svých cílových uzlů. Pokud máte například dokument XML nebo webovou stránku s více sekcemi, můžete identifikovat prvek, který se objeví po konkrétní sekci, aniž byste museli procházet celou stromovou strukturou.

      Rodič

      Metoda Parent Axis v XPath vybere rodiče aktuálního uzlu. K vyhledání nadřazeného uzlu můžete použít následující cestu;

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

      Tento přístup funguje, když podřízené prvky v aktuálním uzlu mají jedinečné atributy, které můžete snadno najít, a chcete je zkontrolovat u rodiče.

      Dítě

      Metoda Child Axis v XPath vybere všechny potomky aktuálního uzlu. Zůstává jednou z nejpopulárnějších metod XPath Axis, protože pomáhá vybrat podřízené uzly určitého prvku.

      Zvažte tento kus kódu;

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

      Pomocí této osy můžeme najít všechny prvky ‚p‘ v našem kódu;

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

      Nejčastější dotazy

      Proč používat XPath místo selektorů CSS?

      Selektory CSS mohou najít prvky pouze na základě jejich ID, názvu značky a třídy. Na druhou stranu můžete použít XPath k vyhledání prvků na základě jejich umístění, obsahu textu a dalších atributů ve struktuře HTML. Výrazy XPath můžete také uložit do proměnných a znovu je použít ve své aplikaci.

      Které jazyky XPath v Selenium podporuje?

      XPath můžete použít s jakýmkoli jazykem, který podporuje Selenium. Své skripty můžete psát v JavaScriptu, Javě, Pythonu, Ruby, C# a PHP.

      Jaké jsou alternativy XPath?

      Jako alternativu k XPath můžete použít CSS Selectory, Image Recognition nebo vestavěné lokátory Selenium. CSS selektory jsou nejběžnější; prvky můžete najít na základě jejich názvu tagu, ID nebo třídy. Rozpoznávání obrázků umožňuje lokalizovat prvky na základě jejich obrázků. Vestavěné lokátory Selenium jsou navrženy tak, aby se daly snadno používat.

      Závěr

      Nyní můžete definovat XPath v Selenium, rozlišovat mezi absolutní a relativní XPath a lokalizovat prvky pomocí různých lokátorů XPath. Výběr lokátoru bude záviset na povaze obsahu a vašich konečných cílech.

      Podívejte se na náš článek o otázkách týkajících se pohovoru o selenu, pokud chcete v příštím rozhovoru zvládnout eso.