Jak zacházet s webovou tabulkou v Selenium

⚡ Chytré shrnutí

Selenium Zpracování webových tabulek umožňuje QA inženýrům číst tabulková data z řádků a sloupců HTML pomocí XPath, CSS a Selenium 4 relativní lokátory. Tento článek se zabývá statickými tabulkami, vnořenými tabulkami, predikáty atributů a technikami umělé inteligence pro dynamické mřížky.

  • 🧱 Anatomie XPath: Každý lokátor tabulek začíná řetězcem //table a dále se pomocí predikátů zabývá tbody, tr a td.
  • 🔁 Dynamické řádky: Funkce findElements vrací seznam WebElements, takže smyčky mohou za běhu počítat řádky a číst buňky.
  • 🪄 Selenium 4: Relativní lokátory nad, pod a blízko zjednodušují zacílení na buňky kolem známého kotevního prvku.
  • 🧠 Lokátory umělé inteligence: Nástroje pro samoopravu detekují posuny sloupců a obnovují identitu řádků bez ručních úprav XPath.
  • 🛠️ Zkontrolovat zkratku: Nástroje pro vývojáře prohlížeče kopírují celý XPath, který můžete pro spolehlivost oříznout zpět na první tabulku.

Selenium Příklad webové tabulky XPath

V čem je webová tabulka Selenium?

A Webová tabulka in Selenium je WebElement používaný pro tabulkovou reprezentaci dat nebo informací. Zobrazená data mohou být statická nebo dynamická. K buňkám a řádkům webové tabulky se přistupuje prostřednictvím metod WebElement v kombinaci s lokátory. Typickým příkladem je mřížka specifikací produktu zobrazená na stránce produktu elektronického obchodování.

Čtení webové tabulky HTML

Testeři často potřebují přistupovat k prvkům, obvykle textovým hodnotám, které se nacházejí v tabulkách HTML. Weboví designéři však zřídka poskytují atribut id nebo name u jednotlivých buněk. Proto metody jako By.id(), By.name() nebo By.cssSelector() fungují jen zřídka. V tomto scénáři je nejspolehlivější možností By.xpath(), protože prochází vztahy rodič-potomek uvnitř tagu table.

Jak zacházet s webovou tabulkou v Selenium

Zvažte níže uvedený HTML kód pro práci s webovými tabulkami Selenium.

Jak zapsat XPath pro tabulku Selenium

Budeme používat XPath získat vnitřní text buňky obsahující text „čtvrtá buňka“.

Jak zapsat XPath pro tabulku Selenium

Krok 1 – Nastavte nadřazený prvek (tabulku)

Lokátory XPath ve WebDriveru vždy začínají dvojitým lomítkem „//“, za nímž následuje nadřazený element.. Vzhledem k tomu, že se zabýváme webovými tabulkami v Selenium, nadřazeným prvkem by měl být vždy štítek. První část našeho Selenium Lokátor tabulky XPath proto musí začínat na „//table“.

Selenium Příklad webové tabulky

Krok 2 – Přidejte podřízené prvky

Prvek přímo pod je , takže je dítětem Naopak, je rodičem Všechny podřízené elementy v XPath jsou umístěny napravo od svého nadřazeného elementu a odděleny jedním lomítkem „/“, jak je znázorněno níže.

Selenium Příklad webové tabulky

Krok 3 – Přidejte predikáty

Ten/Ta/To prvek obsahuje dva značky. Tyto dvě tagy jsou potomky , takže je rodičem obou. Ti dva prvky jsou sourozenci. Sourozenci jsou podřízené prvky, které sdílejí stejného rodiče..

Abyste dosáhli která obsahuje „čtvrtou buňku“, musíme nejprve přistupovat k druhý , ne první. Zápis pouze „//table/tbody/tr“ by cílil na první štítek.

Jak tedy získáme přístup k druhému Odpověď zní použít Predikáty. Predikáty jsou čísla nebo atributy HTML uzavřené v hranatých závorkách „[ ]“, které odlišují podřízený element od jeho sourozenců.Protože potřebujeme druhý řádek, použijeme jako predikát „[2]“.

 Selenium Příklad webové tabulky

Pokud predikát vynecháme, XPath vrátí prvního sourozence. Proto kterýkoli z níže uvedených kódů XPath dosáhne prvního .

Selenium Webová tabulka pomocí Xpath

Krok 4 – Přidejte následující podřízené prvky pomocí příslušných predikátů

Dalším prvkem, který potřebujeme, je druhý Aplikací pravidel z kroků 2 a 3 dojdeme k XPath zobrazenému níže.

Webová tabulka v Selenium pomocí Xpath

Nyní, když máme správný lokátor XPath, můžeme přistupovat k buňce a číst její vnitřní text pomocí níže uvedeného kódu. To předpokládá, že jste HTML stránku uložili jako „newhtml.html“ na disk C.

Webová tabulka v Selenium pomocí Xpath

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/write-xpath-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

Webová tabulka v Selenium pomocí Xpath

Přístup k vnořeným tabulkám

Stejné principy platí pro vnořené tabulky. Vnořené tabulky jsou tabulky umístěné uvnitř jiné tabulky. Příklad je uveden níže.

Jak získat přístup k vnořeným tabulkám v Selenium

Pro přístup k buňce s textem „4-5-6“ s využitím nadřazených prvků a predikátů z předchozí části můžeme sestavit XPath zobrazený níže.

Jak získat přístup k vnořeným tabulkám v Selenium

Níže uvedený kód WebDriveru načte vnitřní text cílové buňky.

Přístup k vnořeným tabulkám v Selenium

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/accessing-nested-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

Níže uvedený výstup potvrzuje, že vnitřní tabulka byla úspěšně zpřístupněna.

Přístup k vnořeným tabulkám v Selenium

Použití atributů jako predikátů

Pokud se element nachází hluboko v HTML, kde je počítání sourozenců problematické, můžeme místo toho použít atribut unique daného elementu.

V níže uvedeném příkladu je buňka „New York do Chicaga“ zakopaná hluboko uvnitř Mercury Domovská stránka prohlídek.

Selenium Příklad webové tabulky s použitím atributů jako predikátů

Selenium Příklad webové tabulky s použitím atributů jako predikátů

Jako predikát můžeme použít jedinečný atribut tabulky (width=”270″). Atributy se používají jako predikáty tak, že se jim předpona symbolem @Ve výše uvedeném příkladu se buňka „New York do Chicaga“ nachází v první čtvrtého , takže náš XPath by měl vypadat jako ten, který je zobrazen níže.

Selenium Příklad webové tabulky s atributy jako predikáty

Nezapomeňte, že když vložíte XPath dovnitř Java, uvozovky kolem čísla „270“ escape zpětným lomítkem, aby řetězec By.xpath() nebyl předčasně ukončen.

Selenium Příklad webové tabulky s atributy jako predikáty

Nyní jsme připraveni přistupovat k této buňce pomocí níže uvedeného kódu.

Selenium Příklad webové tabulky s atributy jako predikáty

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table[@width=\"270\"]/tbody/tr[4]/td"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Selenium Příklad webové tabulky s atributy jako predikáty

Zkratka: Pro přístup k tabulkám v použijte Zkontrolovat prvek Selenium

Pokud je index nebo atribut elementu obtížné získat, nejrychlejším způsobem generování XPath je použití funkce Inspect Element v moderních nástrojích pro vývojáře prohlížečů.

Vezměte si níže uvedený příklad z Mercury Domovská stránka prohlídek.

Selenium Příklad webové tabulky s atributy jako predikáty

Krok 1

Klikněte pravým tlačítkem myši na cílovou buňku a vyberte možnost Prohlédnout pro zobrazení cesty DOM, poté zkopírujte celou XPath.

Selenium Příklad webové tabulky s atributy jako predikáty

Krok 2

Vyhledejte první nadřazený prvek „tabulka“ a odstraňte vše nalevo od něj.

Selenium Příklad webové tabulky s atributy jako predikáty

Krok 3

Zbývající XPath předponou napište dvojité lomítko „//“ a zkopírujte jej do kódu WebDriveru.

Selenium Příklad webové tabulky s atributy

Níže uvedený kód WebDriver načte vnitřní text hluboce vnořeného elementu.

Selenium Příklad webové tabulky s atributy

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table/tbody/tr/td[2]"
        + "//table/tbody/tr[4]/td/"
        + "table/tbody/tr/td[2]/"
        + "table/tbody/tr[2]/td[1]/"
        + "table[2]/tbody/tr[3]/td[2]/font"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Jak spočítat řádky a sloupce v dynamické webové tabulce

Dynamické webové tabulky, jako jsou dashboardy nebo výsledky vyhledávání, při každém načtení vykreslují různý počet řádků. Pro jejich zpracování použijte findElements přinést každý do seznamu a poté procházet každou buňku. Následující úryvek kódu počítá řádky a přečte každou buňku v tabulce s ID „customers“.

List<WebElement> rows = driver.findElements(
    By.xpath("//table[@id='customers']//tr"));
System.out.println("Total rows: " + rows.size());

for (int i = 1; i <= rows.size(); i++) {
    List<WebElement> cells = driver.findElements(
        By.xpath("//table[@id='customers']//tr[" + i + "]/td"));
    for (WebElement cell : cells) {
        System.out.println(cell.getText());
    }
}

Zabalte lokátor do WebDriverWait s visibilityOfAllElementsLocatedBy když je tabulka načtena pomocí AJAXu. Tím se zabrání zastaralým referencím prvků v pomalu se vykreslujících mřížkách.

Selenium 4 relativní lokátory pro webové tabulky

Selenium Verze 4 zavedla relativní lokátory, které cílí na prvky podle vizuální pozice. Jsou užitečné, když se indexy XPath zalomí kvůli změně pořadí řádků. Metody above(), below(), toLeftOf(), toRightOf(), a near() všechny přijímají kotevní WebElement.

import static org.openqa.selenium.support.locators.RelativeLocator.with;

WebElement emailHeader = driver.findElement(By.xpath("//th[text()='Email']"));
WebElement emailCell = driver.findElement(
    with(By.tagName("td")).below(emailHeader));
System.out.println(emailCell.getText());

Relativní lokátory zůstávají čitelné i při změně pořadí sloupců. Pro dosažení nejlepších výsledků na stránkách řízených daty je spárujte s explicitními čekacími operacemi.

Nástroje umělé inteligence pro práci s dynamickými webovými tabulkami

Testovací platformy s podporou umělé inteligence snižují údržbu lokátorů v sítích, které se často mění. Nástroje jako Testim, Mabl, a Zfunkčnit používají počítačové vidění a modely DOM k detekci posunů sloupců a samoopravným lokátorům. Identifikují řádky podle textu záhlaví a podobnosti buněk, nikoli podle pevných indexů XPath.

Pro čisté Selenium projekty, knihovny jako např. Healenium Zabalte WebDriver a přepište nefunkční lokátory za běhu. Kombinací těchto nástrojů s WebDriverWait zachováte stabilitu dynamických tabulkových skriptů bez nutnosti přepisování selektorů po každé změně uživatelského rozhraní.

Shrnutí

  • By.xpath() je nejspolehlivější způsob přístupu k buňkám webové tabulky v Selenium.
  • Pokud je počítání sourozenců obtížné, použijte jako predikát atribut unique s prefixem @.
  • Funkce findElements vrací seznam (List). který podporuje počítání řádků v dynamických tabulkách.
  • Selenium 4 relativní lokátory (nad, pod, blízko) snižují závislost na pozičním XPath.
  • Funkce Inspect Element v DevTools zrychluje generování XPath pro hluboko uložená pole buněk.
  • Nástroje AI jako např Testim, Mabl a Healenium samoopravné lokátory pro změnu mřížek.

Nejčastější dotazy

Webová tabulka v Selenium je WebElement, který zobrazuje tabulková data v řádcích a sloupcích. Může být statický nebo dynamický. Testeři přistupují k jeho buňkám prostřednictvím metod WebElement v kombinaci s lokátory XPath nebo CSS, protože tabulky zřídkakdy zpřístupňují jedinečná ID jednotlivých buněk.

Většina buněk tabulky nemá atribut id ani name, takže By.id() a By.name() nebudou fungovat. XPath prochází strukturou nadřazený-podřízený element table, tbody, tr a td, což z něj činí nejspolehlivější lokátor buněk.

Pro počítání řádků použijte metodu driver.findElements(By.xpath(“//table[@id='tbl']//tr”)).size() a pro počítání sloupců metodu //table[@id='tbl']//tr[1]/td. Metoda findElements vrací seznam (List). který podporuje size() pro rychlé součty řádků.

Selenium Verze 4 zavedla relativní lokátory jako above(), below(), toLeftOf(), toRightOf() a near(). Pomáhají cílit na buňky umístěné kolem známé kotevní buňky, což je užitečné při změnách XPath indexů v dynamických tabulkách.

Projděte řádky pomocí findElements a poté přečtěte každou buňku pomocí getText(). Dynamicky sestavte XPath pomocí zřetězení řetězců, například //tr[“+i+”]/td[“+j+”]. Před čtením hodnot počkejte na načtení tabulky pomocí WebDriverWait.

Ano. Nástroje poháněné umělou inteligencí, jako například Testim, Mabl a Functionize používají modely počítačového vidění a DOM k detekci hranic tabulek, odvozování záhlaví a samoopravným lokátorům při posunu sloupců. To snižuje potřebu údržby XPath pro dynamické dashboardy.

Modely umělé inteligence se učí vzory řádků z předchozích běhů a porovnávají buňky pomocí podobnosti textu namísto pevných indexů. I když se řádek přesune nebo sloupec se změní, lokátor umělé inteligence stále najde cíl bez přepisování XPath.

Funkce findElement vrací jeden WebElement a pokud chybí, vyvolá výjimku NoSuchElementException. Funkce findElements vrací seznam. a vrátí prázdný seznam, pokud není nalezena žádná shoda. Použijte findElements, když hledáteping přes řádky nebo sloupce tabulky.

Shrňte tento příspěvek takto: