Как да управлявате уеб таблица в Selenium

⚡ Умно обобщение

Selenium Работата с уеб таблици позволява на QA инженерите да четат таблични данни от HTML редове и колони, използвайки XPath, CSS и Selenium 4 относителни локатора. Тази статия разглежда статични таблици, вложени таблици, атрибутни предикати и техники с изкуствен интелект за динамични мрежи.

  • 🧱 Анатомия на XPath: Всеки локатор на таблици започва с //table и разглежда tbody, tr и td, използвайки предикати.
  • 🔁 Динамични редове: findElements връща списък с WebElements, така че циклите да могат да броят редове и да четат клетки по време на изпълнение.
  • 🪄 Selenium 4: Относителните локатори отгоре, отдолу и близо до тях опростяват насочването към клетки около известен котвен елемент.
  • 🧠 Локатори с изкуствен интелект: Инструментите за самовъзстановяване откриват измествания на колони и възстановяват идентичността на редовете без ръчни XPath редакции.
  • 🛠️ Проверете прекия път: Инструментите за разработчици на браузъра копират пълен XPath, който можете да съкратите до първата таблица за надеждност.

Selenium Пример за XPath в уеб таблица

В какво е уеб таблица Selenium?

A Уеб таблица in Selenium е WebElement, използван за таблично представяне на данни или информация. Показаните данни могат да бъдат статични или динамични. Достъпът до клетките и редовете на уеб таблицата се осъществява чрез WebElement методи, комбинирани с локатори. Типичен пример е мрежата със спецификации на продукта, показана на продуктова страница в електронна търговия.

Четене на HTML уеб таблица

Много често тестерите се нуждаят от достъп до елементи, обикновено текстови стойности, разположени в HTML таблици. Уеб дизайнерите обаче рядко предоставят атрибут id или name на отделни клетки. Следователно, методи като By.id(), By.name() или By.cssSelector() рядко работят. В този сценарий най-надеждният вариант е By.xpath(), защото той преглежда връзките родител-дете вътре в тага на таблицата.

Как да управлявате уеб таблица в Selenium

Разгледайте HTML кода по-долу за работа с уеб таблици Selenium.

Как да напиша XPath за Table в Selenium

Ще използваме XPath за да получите вътрешния текст на клетката, съдържаща текста „четвърта клетка“.

Как да напиша XPath за Table в Selenium

Стъпка 1 – Задаване на родителски елемент (таблица)

XPath локаторите в WebDriver винаги започват с двойна наклонена черта „//“, последвана от родителския елемент.. Тъй като имаме работа с уеб таблици в Selenium, родителският елемент винаги трябва да бъде етикет. Първата порция от нашата Selenium Следователно, XPath локаторът на таблици трябва да започва с „//table“.

Selenium Пример за уеб таблица

Стъпка 2 – Добавете дъщерните елементи

Елементът директно под е , така че е дете на Обратно, е родител на Всички дъщерни елементи в XPath се поставят вдясно от родителския си елемент, разделени с една наклонена черта „/“, както е показано по-долу.

Selenium Пример за уеб таблица

Стъпка 3 – Добавяне на предикати

The елементът съдържа два етикети. Тези два таговете са деца на , така че е родител и на двамата. Двамата елементите са братя и сестри. Братята и сестрите са дъщерни елементи, които споделят един и същ родител.

За да стигнете до която съдържа „четвърта клетка“, първо трябва да получим достъп до втори , а не първият. Писането само на „//table/tbody/tr“ би насочило вниманието към първия етикет.

И така, как да получим достъп до второто Отговорът е да се използва Предикати. Предикатите са числа или HTML атрибути, затворени в квадратни скоби „[ ]“, които разграничават дъщерен елемент от неговите братя и сестри.Тъй като редът, който ни е необходим, е вторият, използваме „[2]“ като предикат.

 Selenium Пример за уеб таблица

Ако пропуснем предиката, XPath връща първия брат/сестра. Следователно, всеки от XPath кодовете по-долу ще достигне първия .

Selenium Уеб таблица с помощта на Xpath

Стъпка 4 – Добавяне на последващи дъщерни елементи с помощта на подходящите предикати

Следващият елемент, от който се нуждаем, е вторият Прилагайки правилата от стъпки 2 и 3, стигаме до XPath, показан по-долу.

Уеб таблица в Selenium използвайки Xpath

След като вече имаме правилния XPath локатор, можем да осъществим достъп до клетката и да прочетем вътрешния ѝ текст, използвайки кода по-долу. Това предполага, че сте запазили HTML страницата като „newhtml.html“ във вашето C устройство.

Уеб таблица в Selenium използвайки 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();
}

Уеб таблица в Selenium използвайки Xpath

Достъп до вложени таблици

Същите принципи важат и за вложените таблици. Вложените таблици са таблици, разположени в друга таблица. Пример е показан по-долу.

Как да получите достъп до вложени таблици в Selenium

За да достъпим клетката с текст „4-5-6“, използвайки идеите за родител/дете и предикат от предишния раздел, можем да съставим XPath, показан по-долу.

Как да получите достъп до вложени таблици в Selenium

Кодът на WebDriver по-долу извлича вътрешния текст на целевата клетка.

Достъп до вложени таблици в 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();
}

Изходът по-долу потвърждава, че достъпът до вътрешната таблица е успешен.

Достъп до вложени таблици в Selenium

Използване на атрибути като предикати

Ако елементът се намира дълбоко в HTML кода, където броенето на братя и сестри става болезнено, можем да използваме атрибута unique на този елемент.

В примера по-долу клетката „Ню Йорк до Чикаго“ е скрита дълбоко в Mercury Начална страница на Tours.

Selenium Пример за уеб таблица с използване на атрибути като предикати

Selenium Пример за уеб таблица с използване на атрибути като предикати

Можем да използваме уникалния атрибут на таблицата (width=”270″) като предикат. Атрибутите се използват като предикати, като пред тях се поставя символът @В горния пример клетката „Ню Йорк до Чикаго“ се намира в първата на четвъртия , така че нашият XPath трябва да изглежда като показания по-долу.

Selenium Пример за уеб таблица с атрибути като предикати

Не забравяйте, че когато поставите XPath вътре Java, екранирайте двойните кавички около „270“ с обратна наклонена черта, така че низът By.xpath() да не се прекратява преждевременно.

Selenium Пример за уеб таблица с атрибути като предикати

Вече сме готови за достъп до тази клетка с помощта на кода по-долу.

Selenium Пример за уеб таблица с атрибути като предикати

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 Пример за уеб таблица с атрибути като предикати

Пряк път: Използвайте Inspect Element за достъп до таблици в Selenium

Ако индексът или атрибутът на даден елемент е трудно да се получи, най-бързият начин за генериране на XPath е чрез използване на Inspect Element в съвременните DevTools на браузъра.

Разгледайте примера по-долу от Mercury Начална страница на Tours.

Selenium Пример за уеб таблица с атрибути като предикати

Стъпка

Щракнете с десния бутон върху целевата клетка и изберете „Инспектиране“, за да видите DOM пътя, след което копирайте пълния XPath.

Selenium Пример за уеб таблица с атрибути като предикати

Стъпка

Потърсете първия родителски елемент „таблица“ и изтрийте всичко вляво от него.

Selenium Пример за уеб таблица с атрибути като предикати

Стъпка

Добавете двойна наклонена черта „//“ към останалия XPath и го копирайте в кода на WebDriver.

Selenium Пример за уеб таблица с атрибути

Кодът на WebDriver по-долу извлича вътрешния текст на дълбоко вложения елемент.

Selenium Пример за уеб таблица с атрибути

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

Как да преброим редове и колони в динамична уеб таблица

Динамичните уеб таблици, като например табла за управление или резултати от търсене, рендират различен брой редове при всяко зареждане. За да ги обработите, използвайте findElements да донеса всеки в списък, след което преминава през цикъл, за да прочете всяка клетка. Фрагментът по-долу брои редове и прочита всяка клетка в таблица, чийто идентификатор е „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());
    }
}

Увийте локатора в WebDriverWait с visibilityOfAllElementsLocatedBy когато таблицата се зарежда от AJAX. Това предотвратява остарели препратки към елементи в бавно рендериращи се мрежи.

Selenium 4 относителни локатора за уеб таблици

Selenium 4 въведе относителни локатори, които насочват елементите по визуална позиция. Те са полезни, когато XPath индексите се прекъснат, защото редовете са пренаредени. Методите above(), below(), toLeftOf(), toRightOf(), и near() всички приемат 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());

Относителните локатори остават четливи, когато редът на колоните се промени. Свържете ги с изрични чакания за най-силни резултати на страници, управлявани от данни.

Инструменти с изкуствен интелект за работа с динамични уеб таблици

Платформите за тестване, подпомагани от изкуствен интелект, намаляват поддръжката на локатора в мрежи, които се променят често. Инструменти като Testim, Мабл, и Функционирайте използват компютърно зрение плюс DOM модели за откриване на измествания на колони и самовъзстановяващи се локатори. Те идентифицират редове по текст на заглавката и сходство на клетките, а не по фиксирани XPath индекси.

За чисто Selenium проекти, библиотеки като например Хеалиниум Обвийте WebDriver и пренапишете повредените локатори по време на изпълнение. Комбинирайте тези инструменти с WebDriverWait, за да поддържате динамичните таблични скриптове стабилни, без да пренаписвате селекторите след всяка промяна в потребителския интерфейс.

Oбобщение

  • By.xpath() е най-надеждният начин за достъп до клетки на уеб таблица в Selenium.
  • Ако преброяването на братя и сестри е трудно, използвайте уникален атрибут като предикат, с префикс @.
  • findElements връща списък който поддържа броене на редове в динамични таблици.
  • Selenium 4 относителни локатора (над, под, близо) намаляват зависимостта от позиционния XPath.
  • Inspect Element в DevTools ускорява генерирането на XPath за дълбоко заровени клетки.
  • AI инструменти като Testim, Mabl и Healenium самовъзстановяващи се локатори за променящи се мрежи.

Въпроси и Отговори

Уеб таблица в Selenium е WebElement, който показва таблични данни в редове и колони. Може да бъде статичен или динамичен. Тестерите осъществяват достъп до клетките му чрез WebElement методи, комбинирани с XPath или CSS локатори, тъй като таблиците рядко показват уникални идентификатори на отделни клетки.

Повечето клетки в таблицата не носят атрибут id или name, така че By.id() и By.name() няма да работят. XPath преминава през структурата родител-дете на елементите table, tbody, tr и td, което го прави най-надеждният локатор за клетки.

Използвайте driver.findElements(By.xpath(“//table[@id='tbl']//tr”).size() за преброяване на редове и //table[@id='tbl']//tr[1]/td за преброяване на колони. Методът findElements връща списък (List). който поддържа size() за бързо сумиране на редове.

Selenium Версия 4 въведе относителни локатори като above(), below(), toLeftOf(), toRightOf() и near(). Те помагат за насочване към клетки, разположени около известна котвена клетка, което е полезно, когато XPath индексите се променят в динамични таблици.

Преминете през редовете с findElements, след което прочетете всяка клетка с getText(). Изградете XPath динамично, използвайки конкатенация на низове, например //tr[“+i+”]/td[“+j+”]. Изчакайте таблицата да се зареди с WebDriverWait, преди да прочетете стойностите.

Да. Инструменти, задвижвани от изкуствен интелект, като например Testim, Mabl и Functionize използват компютърно зрение и DOM модели за откриване на граници на таблици, за извеждане на заглавки и самовъзстановяване на локатори при изместване на колони. Това намалява поддръжката на XPath за динамични табла за управление.

Моделите с изкуствен интелект изучават модели на редове от предишни изпълнения и съпоставят клетки, използвайки текстово сходство, а не фиксирани индекси. Когато ред се премести или колона се пренареди, локаторът с изкуствен интелект все пак намира целта, без да пренаписва XPath.

findElement връща един WebElement и хвърля NoSuchElementException, ако липсва. findElements връща List и връща празен списък, ако не е намерено съвпадение. Използвайте findElements, когато търситеping върху редове или колони на таблицата.

Обобщете тази публикация с: