Kako rukovati web tablicom u Selenium

โšก Pametni saลพetak

Selenium Obrada web tablica omoguฤ‡uje QA inลพenjerima ฤitanje tabliฤnih podataka iz HTML redaka i stupaca pomoฤ‡u XPath-a, CSS-a i Selenium 4 relativna lokatora. Ovaj ฤlanak prolazi kroz statiฤke tablice, ugnijeลพฤ‘ene tablice, predikate atributa i tehnike umjetne inteligencije za dinamiฤke mreลพe.

  • ๐Ÿงฑ Anatomija XPath-a: Svaki lokator tablice poฤinje s //table i detaljno analizira tbody, tr i td koristeฤ‡i predikate.
  • ๐Ÿ” Dinamiฤki retci: findElements vraฤ‡a popis WebElementsa tako da petlje mogu brojati retke i ฤitati ฤ‡elije za vrijeme izvoฤ‘enja.
  • ๐Ÿช„ Selenium 4: Relativni lokatori iznad, ispod i blizu pojednostavljuju ciljanje ฤ‡elija oko poznatog sidrenog elementa.
  • ๐Ÿง  AI lokatori: Alati za samoobnavljanje otkrivaju pomicanje stupaca i vraฤ‡aju identitet redaka bez ruฤnog ureฤ‘ivanja XPath-a.
  • ๐Ÿ› ๏ธ Pregledaj preฤac: Browser DevTools kopira cijeli XPath koji moลพete skratiti na prvu tablicu radi pouzdanosti.

Selenium Primjer XPath web tablice

U ฤemu je web tablica Selenium?

A Web tablica in Selenium je WebElement koji se koristi za tabliฤni prikaz podataka ili informacija. Prikazani podaci mogu biti statiฤki ili dinamiฤki. ฤ†elijama i retcima web tablice pristupa se putem WebElement metoda u kombinaciji s lokatorima. Tipiฤan primjer je mreลพa specifikacija proizvoda prikazana na stranici proizvoda e-trgovine.

ฤŒitanje HTML web tablice

Mnogo puta testeri trebaju pristupiti elementima, obiฤno tekstualnim vrijednostima, koji se nalaze unutar HTML tablica. Meฤ‘utim, web dizajneri rijetko daju atribut id ili name na pojedinaฤnim ฤ‡elijama. Stoga metode poput By.id(), By.name() ili By.cssSelector() rijetko funkcioniraju. U ovom scenariju, najpouzdanija opcija je By.xpath() jer prolazi kroz odnose roditelj-dijete unutar oznake tablice.

Kako rukovati web tablicom u Selenium

Razmotrite HTML kod u nastavku za rukovanje web tablicama Selenium.

Kako napisati XPath za tablicu u Selenium

Koristit ฤ‡emo XPath da biste dobili unutarnji tekst ฤ‡elije koja sadrลพi tekst "ฤetvrta ฤ‡elija".

Kako napisati XPath za tablicu u Selenium

Korak 1 โ€“ Postavite nadreฤ‘eni element (tablica)

XPath lokatori u WebDriveru uvijek poฤinju s dvostrukom kosom crtom "//" nakon koje slijedi roditeljski element. Buduฤ‡i da se bavimo web tablicama u Selenium, nadreฤ‘eni element bi uvijek trebao biti oznaฤiti. Prva porcija naลกeg Selenium XPath lokator tablice stoga mora zapoฤeti s โ€ž//tableโ€œ.

Selenium Primjer web tablice

Korak 2 โ€“ Dodajte podreฤ‘ene elemente

Element neposredno ispod je , pa je dijete od Suprotno tome, je roditelj od Svi podreฤ‘eni elementi u XPath-u smjeลกteni su desno od svog roditeljskog elementa, odvojeni jednom kosom crtom "/" kao ลกto je prikazano dolje.

Selenium Primjer web tablice

Korak 3 โ€“ Dodajte predikate

The element sadrลพi dva oznake. Ove dvije oznake su djeca od , pa je roditelj oboje. Dvoje elementi su braฤ‡a i sestre. Braฤ‡a i sestre su podreฤ‘eni elementi koji dijele istog roditelja..

Da biste doลกli do koja sadrลพi โ€žฤetvrtu ฤ‡elijuโ€œ, prvo moramo pristupiti drugi , a ne prvi. Pisanje samo "//table/tbody/tr" ciljalo bi prvi oznaฤiti.

Dakle, kako pristupiti drugom Odgovor je koristiti Predikati. Predikati su brojevi ili HTML atributi zatvoreni u uglatim zagradama โ€ž[ ]โ€œ koji razlikuju podreฤ‘eni element od njegovih srodnih elemenata.Buduฤ‡i da nam je potreban drugi redak, kao predikat koristimo โ€ž[2]โ€œ.

 Selenium Primjer web tablice

Ako izostavimo predikat, XPath vraฤ‡a prvog brata. Stoga ฤ‡e bilo koji od XPath kodova u nastavku dosegnuti prvog .

Selenium Web tablica koristeฤ‡i Xpath

Korak 4 โ€“ Dodajte sljedeฤ‡e podreฤ‘ene elemente pomoฤ‡u odgovarajuฤ‡ih predikata

Sljedeฤ‡i element koji nam treba je drugi Primjenom pravila iz koraka 2 i 3 dolazimo do XPath-a prikazanog u nastavku.

Web tablica u Selenium koristeฤ‡i Xpath

Sada kada imamo ispravan XPath lokator, moลพemo pristupiti ฤ‡eliji i proฤitati njezin unutarnji tekst pomoฤ‡u donjeg koda. To pretpostavlja da ste spremili HTML stranicu kao "newhtml.html" na C pogonu.

Web tablica u Selenium koristeฤ‡i 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();
}

Web tablica u Selenium koristeฤ‡i Xpath

Pristup ugnijeลพฤ‘enim tablicama

Ista naฤela vrijede i za ugnijeลพฤ‘ene tablice. Ugnijeลพฤ‘ene tablice su tablice smjeลกtene unutar druge tablice. Primjer je prikazan u nastavku.

Kako pristupiti ugnijeลพฤ‘enim tablicama u Selenium

Za pristup ฤ‡eliji s tekstom โ€ž4-5-6โ€œ koristeฤ‡i ideje za roditelj/dijete i predikat iz prethodnog odjeljka, moลพemo sastaviti XPath prikazan u nastavku.

Kako pristupiti ugnijeลพฤ‘enim tablicama u Selenium

WebDriverov kod u nastavku dohvaฤ‡a unutarnji tekst ciljane ฤ‡elije.

Pristup ugnijeลพฤ‘enim tablicama u 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();
}

Ispis u nastavku potvrฤ‘uje da je uspjeลกno pristupljeno unutarnjoj tablici.

Pristup ugnijeลพฤ‘enim tablicama u Selenium

Koriลกtenje atributa kao predikata

Ako se element nalazi duboko unutar HTML-a, gdje brojanje braฤ‡e i sestara postaje mukotrpno, umjesto toga moลพemo koristiti atribut unique tog elementa.

U donjem primjeru, ฤ‡elija โ€žNew York do Chicagaโ€œ nalazi se duboko unutar Mercury Poฤetna stranica Tours.

Selenium Primjer web tablice koja koristi atribute kao predikate

Selenium Primjer web tablice koja koristi atribute kao predikate

Kao predikat moลพemo koristiti jedinstveni atribut tablice (width=โ€270โ€ณ). Atributi se koriste kao predikati tako ลกto im se ispred stavlja simbol @U gornjem primjeru, ฤ‡elija โ€žNew York do Chicagaโ€œ nalazi se u prvoj ฤetvrtog , pa bi naลก XPath trebao izgledati kao ลกto je prikazano dolje.

Selenium Primjer web tablice s atributima kao predikatima

Imajte na umu da kada stavite XPath unutra Java, dvostruke navodnike oko "270" izbjegnite obrnutom kosom crtom kako se niz By.xpath() ne bi prerano zavrลกio.

Selenium Primjer web tablice s atributima kao predikatima

Sada smo spremni pristupiti toj ฤ‡eliji pomoฤ‡u donjeg koda.

Selenium Primjer web tablice s atributima kao predikatima

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 Primjer web tablice s atributima kao predikatima

Preฤac: Koristite Inspect Element za pristup tablicama Selenium

Ako je indeks ili atribut elementa teลกko dobiti, najbrลพi naฤin generiranja XPath-a je koriลกtenje Inspect Elementa u modernim DevTools alatima preglednika.

Razmotrite primjer u nastavku iz Mercury Poฤetna stranica Tours.

Selenium Primjer web tablice s atributima kao predikatima

Korak 1

Desnom tipkom miลกa kliknite ciljnu ฤ‡eliju i odaberite Pregledaj da biste vidjeli DOM putanju, a zatim kopirajte cijeli XPath.

Selenium Primjer web tablice s atributima kao predikatima

Korak 2

Potraลพite prvi roditeljski element "table" i izbriลกite sve lijevo od njega.

Selenium Primjer web tablice s atributima kao predikatima

Korak 3

Preostali XPath prefiksirajte dvostrukom kosom crtom "//" i kopirajte ga u svoj WebDriver kod.

Selenium Primjer web tablice s atributima

WebDriver kod u nastavku dohvaฤ‡a unutarnji tekst duboko ugnijeลพฤ‘enog elementa.

Selenium Primjer web tablice s atributima

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();
}

Kako prebrojati retke i stupce u dinamiฤkoj web tablici

Dinamiฤke web tablice, kao ลกto su nadzorne ploฤe ili rezultati pretraลพivanja, prikazuju razliฤit broj redaka pri svakom uฤitavanju. Za njihovu obradu koristite findElements dohvatiti svaki u Listu, a zatim kroz nju proฤ‘ite kroz petlju kako biste proฤitali svaku ฤ‡eliju. Isjeฤak u nastavku broji retke i ฤita svaku ฤ‡eliju u tablici ฤiji je ID "kupci".

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());
    }
}

Zamotajte lokator u WebDriverWait sa visibilityOfAllElementsLocatedBy kada AJAX uฤitava tablicu. To sprjeฤava zastarjele reference elemenata na mreลพama koje se sporo renderiraju.

Selenium 4 relativna lokatora za web tablice

Selenium 4 je uveo relativne lokatore koji ciljaju elemente prema vizualnom poloลพaju. Korisni su kada se XPath indeksi prekidaju zbog promjene redoslijeda redaka. Metode above(), below(), toLeftOf(), toRightOf()i near() svi prihvaฤ‡aju sidreni 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());

Relativni lokatori ostaju ฤitljivi kada se promijeni redoslijed stupaca. Uparite ih s eksplicitnim ฤekanjima za najjaฤe rezultate na stranicama temeljenim na podacima.

AI alati za rukovanje dinamiฤkim web tablicama

Platforme za testiranje potpomognute umjetnom inteligencijom smanjuju odrลพavanje lokatora na mreลพama koje se ฤesto mijenjaju. Alati poput Testim, Mabli Funkcionalizirati koriste raฤunalni vid i DOM modele za otkrivanje pomaka stupaca i samoobnavljajuฤ‡e lokatore. Identificiraju retke prema tekstu zaglavlja i sliฤnosti ฤ‡elija, a ne prema fiksnim XPath indeksima.

Za ฤisto Selenium projekti, knjiลพnice kao ลกto su Healenium Omotajte WebDriver i prepiลกite neispravne lokatore tijekom izvoฤ‘enja. Kombinirajte ove alate s WebDriverWait kako biste odrลพali stabilnost dinamiฤkih skripti tablica bez prepisivanja selektora nakon svake promjene korisniฤkog suฤelja.

Rezime

  • By.xpath() je najpouzdaniji naฤin pristupa ฤ‡elijama web tablice u Selenium.
  • Ako je brojanje braฤ‡e i sestara teลกko, koristite jedinstveni atribut kao predikat, s prefiksom @.
  • findElements vraฤ‡a listu koji podrลพava brojanje redaka u dinamiฤkim tablicama.
  • Selenium 4 relativna lokatora (iznad, ispod, blizu) smanjuju ovisnost o pozicijskom XPath-u.
  • Inspect Element u DevToolsima ubrzava generiranje XPath-a za duboko zakopane ฤ‡elije.
  • AI alati kao ลกto su Testim, Mabl i Healenium lokatori s moguฤ‡noลกฤ‡u samoobnavljanja za promjenu mreลพe.

Pitanja i odgovori

Web tablica u Selenium je WebElement koji prikazuje tabliฤne podatke u retcima i stupcima. Moลพe biti statiฤki ili dinamiฤki. Testeri pristupaju njegovim ฤ‡elijama putem WebElement metoda u kombinaciji s XPath ili CSS lokatorima jer tablice rijetko otkrivaju jedinstvene ID-ove na pojedinaฤnim ฤ‡elijama.

Veฤ‡ina ฤ‡elija tablice ne sadrลพi atribut id ili name, pa By.id() i By.name() neฤ‡e raditi. XPath prolazi kroz strukturu roditelj-dijete elemenata table, tbody, tr i td, ลกto ga ฤini najpouzdanijim lokatorom za ฤ‡elije.

Koristite driver.findElements(By.xpath(โ€œ//table[@id='tbl']//trโ€).size() za brojanje redaka i //table[@id='tbl']//tr[1]/td za brojanje stupaca. Metoda findElements vraฤ‡a listu koji podrลพava size() za brzo zbrajanje iznosa redaka.

Selenium Verzija 4 uvela je relativne lokatore poput above(), below(), toLeftOf(), toRightOf() i near(). Oni pomaลพu u ciljanju ฤ‡elija pozicioniranih oko poznate sidrene ฤ‡elije, ลกto je korisno kada se XPath indeksi mijenjaju u dinamiฤkim tablicama.

Proฤ‘ite kroz retke pomoฤ‡u findElements, a zatim proฤitajte svaku ฤ‡eliju pomoฤ‡u getText(). Izgradite XPath dinamiฤki koristeฤ‡i spajanje stringova kao ลกto je //tr[โ€œ+i+โ€]/td[โ€œ+j+โ€]. Priฤekajte da se tablica uฤita pomoฤ‡u WebDriverWait prije ฤitanja vrijednosti.

Da. Alati pokretani umjetnom inteligencijom poput Testim, Mabl i Functionize koriste raฤunalni vid i DOM modele za otkrivanje granica tablica, zakljuฤivanje zaglavlja i samoobnavljanje lokatora kada se stupci pomiฤu. To smanjuje odrลพavanje XPath-a za dinamiฤke nadzorne ploฤe.

AI modeli uฤe uzorke redaka iz prethodnih pokretanja i usporeฤ‘uju ฤ‡elije koristeฤ‡i sliฤnost teksta umjesto fiksnih indeksa. Kada se redak pomakne ili stupac preuredi, AI lokator i dalje pronalazi cilj bez prepisivanja XPath-a.

findElement vraฤ‡a jedan WebElement i izbacuje NoSuchElementException ako nedostaje. findElements vraฤ‡a List i vraฤ‡a praznu listu ako se ne pronaฤ‘e nijedan rezultat. Koristite findElements kada looping preko redaka ili stupaca tablice.

Saลพmite ovu objavu uz: