Как обрабатывать веб-таблицу в Selenium

⚡ Умное резюме

Selenium Функция работы с веб-таблицами позволяет инженерам по контролю качества считывать табличные данные из строк и столбцов HTML с помощью XPath, CSS и других инструментов. Selenium 4 относительных локатора. В этой статье рассматриваются статические таблицы, вложенные таблицы, предикаты атрибутов и методы искусственного интеллекта для динамических таблиц.

  • 🧱 Анатомия XPath: Каждый указатель на таблицу начинается с //table и переходит к элементам tbody, tr и td, используя предикаты.
  • 🔁 Динамические строки: Функция findElements возвращает список элементов WebElements, что позволяет циклам подсчитывать строки и считывать ячейки во время выполнения.
  • 🪄 Selenium 4: Использование относительных локаторов сверху, снизу и вблизи упрощает наведение на клетки вокруг известного якорного элемента.
  • ???? Локалаторы на основе ИИ: Инструменты самовосстановления обнаруживают смещения столбцов и восстанавливают идентичность строк без ручного редактирования XPath.
  • 🇧🇷 Проверить ярлык: Инструменты разработчика браузера копируют полный XPath, который для большей надежности можно сократить до первой таблицы.

Selenium Пример XPath для веб-таблиц

Что такое веб-таблица Selenium?

A Веб-таблица in Selenium Это веб-элемент, используемый для табличного представления данных или информации. Отображаемые данные могут быть как статическими, так и динамическими. Доступ к ячейкам и строкам веб-таблицы осуществляется с помощью методов веб-элемента в сочетании с локаторами. Типичным примером является сетка характеристик товара, отображаемая на странице товара в интернет-магазине.

Чтение HTML-таблицы в веб-браузере

Часто тестировщикам требуется доступ к элементам, обычно текстовым значениям, расположенным внутри HTML-таблиц. Однако веб-дизайнеры редко указывают атрибуты id или name для отдельных ячеек. Поэтому такие методы, как By.id(), By.name() или By.cssSelector(), редко работают. В этом случае наиболее надежным вариантом является By.xpath(), поскольку он проходит по связям «родитель-потомок» внутри тега таблицы.

Как обрабатывать веб-таблицу в Selenium

Рассмотрим приведенный ниже HTML-код для обработки веб-таблиц в Selenium.

Как написать XPath для таблицы в Selenium

Мы будем использовать XPath чтобы получить внутренний текст ячейки, содержащей текст «четвертая ячейка».

Как написать XPath для таблицы в Selenium

Шаг 1 – Установите родительский элемент (таблицу)

В WebDriver локаторы XPath всегда начинаются с двойной косой черты «//», за которой следует родительский элемент.. Поскольку мы имеем дело с веб-таблицами в Selenium, родительский элемент всегда должен быть ярлык. Первая порция нашего Selenium Следовательно, указатель таблицы XPath должен начинаться с «//table».

Selenium Пример веб-таблицы

Шаг 2 – Добавьте дочерние элементы

Элемент, расположенный непосредственно под является , так является ребенком И наоборот, является родителем Все дочерние элементы в XPath располагаются справа от родительского элемента, разделяясь одной косой чертой «/», как показано ниже.

Selenium Пример веб-таблицы

Шаг 3 – Добавьте предикаты

Он элемент содержит два теги. Эти два теги являются дочерними элементами , так является родителем обоих. Эти двое Элементы являются родственными. Братья и сестры — это элементы потомства, имеющие общего родителя..

Чтобы добраться до Чтобы получить доступ к ячейке, содержащей «четвертую ячейку», необходимо сначала получить к ней доступ. второй не первый. Написание только «//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-кода, где подсчет соседних элементов становится затруднительным, мы можем использовать вместо этого уникальный атрибут этого элемента.

В приведенном ниже примере ячейка «Нью-Йорк — Чикаго» находится глубоко внутри Mercury Домашняя страница туров.

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

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

В качестве предиката можно использовать уникальный атрибут таблицы (width=”270″). Атрибуты используются в качестве предикатов путем добавления к ним префикса @.В приведенном выше примере ячейка «Нью-Йорк — Чикаго» расположена в первой ячейке. четвертого Таким образом, наш XPath должен выглядеть примерно так, как показано ниже.

Selenium Пример веб-таблицы с атрибутами в качестве предикатов

Помните, что когда вы вставляете XPath внутрь JavaЧтобы строка, созданная с помощью By.xpath(), не завершалась преждевременно, необходимо экранировать двойные кавычки вокруг "270" обратной косой чертой.

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 — использовать инструмент «Просмотреть элемент» в современных инструментах разработчика браузера.

Рассмотрим приведенный ниже пример из Mercury Домашняя страница туров.

Selenium Пример веб-таблицы с атрибутами в качестве предикатов

Шаг 1

Щелкните правой кнопкой мыши по целевой ячейке и выберите «Просмотреть код элемента», чтобы увидеть путь к DOM-дереву, затем скопируйте полный XPath.

Selenium Пример веб-таблицы с атрибутами в качестве предикатов

Шаг 2

Найдите первый родительский элемент «таблица» и удалите все слева от него.

Selenium Пример веб-таблицы с атрибутами в качестве предикатов

Шаг 3

Добавьте к оставшемуся 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() Все они принимают в качестве аргумента веб-элемент <a>.

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, чтобы обеспечить стабильность скриптов динамических таблиц без перезаписи селекторов после каждого изменения пользовательского интерфейса.

Резюме

  • Метод `by.xpath()` — наиболее надежный способ доступа к ячейкам веб-таблицы. Selenium.
  • Если подсчет братьев и сестер затруднен, используйте уникальный атрибут в качестве предиката, которому предшествует символ @.
  • Метод findElements возвращает список. который поддерживает подсчет строк в динамических таблицах.
  • Selenium 4 относительных локатора (above, below, near) уменьшают зависимость от позиционного XPath.
  • Функция «Проверить элемент» в инструментах разработчика ускоряет генерацию XPath для ячеек, расположенных глубоко внутри.
  • Инструменты ИИ, такие как Testim, Mabl и Healenium — самовосстанавливающиеся локаторы для изменяющихся сеток.

Часто задаваемые вопросы (FAQ)

Веб-таблица в 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, прежде чем считывать значения.

Да. Инструменты на основе искусственного интеллекта, такие как TestimMabl и Functionize используют компьютерное зрение и модели DOM для обнаружения границ таблиц, определения заголовков и самовосстановления локаторов при смещении столбцов. Это упрощает поддержку XPath для динамических панелей мониторинга.

Модели ИИ изучают шаблоны строк на основе предыдущих запусков и сопоставляют ячейки, используя сходство текста, а не фиксированные индексы. Даже если строка перемещается или столбец переупорядочивается, локатор ИИ всё равно находит цель без перезаписи XPath.

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

Подведем итог этой публикации следующим образом: