Обработка динамических веб-таблиц с помощью Selenium WebDriver

Содержание:

Anonim

В сети опубликованы два типа HTML-таблиц:

  1. Статические таблицы : данные статичны, т.е. количество строк и столбцов фиксировано.
  2. Динамические таблицы : данные являются динамическими, т.е. количество строк и столбцов НЕ фиксировано.

Теперь мы узнаем, как работать с динамической таблицей в Selenium:

Ниже приведен пример динамической веб-таблицы в Selenium for Sales. В зависимости от фильтров даты ввода количество строк будет изменено. Итак, это динамичный характер.

Обработка статической таблицы проста, но обработка динамических таблиц в Selenium немного сложна, поскольку строки и столбцы не являются постоянными.

В этом руководстве вы узнаете:

  • Использование X-Path для поиска элементов веб-таблицы
  • Пример: получение количества строк и столбцов из Dynamic WebTable
  • Пример: получение значения ячейки определенной строки и столбца динамической таблицы
  • Пример: получить максимум всех значений в столбце динамической таблицы
  • Пример: получить все значения динамической таблицы

Использование X-Path для поиска элементов веб-таблицы

Прежде чем мы найдем веб-элемент, сначала давайте разберемся -

Что такое веб-элемент?

Веб-элементы - это не что иное, как элементы HTML, такие как текстовое поле, выпадающие переключатели, кнопки отправки и т. Д. Эти элементы HTML записываются с помощью начального тега и заканчиваются конечным тегом.

Например,

Мой первый HTML-документ

.

Шаги по получению X-пути веб-элемента, который мы хотим найти.

Шаг 1) В Chrome перейдите на http://demo.guru99.com/test/web-table-element.php

Шаг 2) Щелкните правой кнопкой мыши веб-элемент, для которого требуется получить x-путь. В нашем случае щелкните правой кнопкой мыши «Компания» и выберите параметр «Проверить». Будет показан следующий экран -

Шаг 3) Щелкните правой кнопкой мыши выделенный веб-элемент> выберите "Копировать" -> "Копировать x-путь".

Шаг 4) Используйте скопированный X-путь "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" в Selenium WebDriver, чтобы найти элемент.

Пример: получение количества строк и столбцов из Dynamic WebTable

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

Используя веб-драйвер Selenium, мы можем найти

  • Количество строк и столбцов веб-таблицы в Selenium
  • Данные X строки или Y столбца.

Ниже приведена программа для получения общего количества строк и столбцов для обработки веб-таблицы в Selenium:

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Noofrowsandcols {public static void main (String [] args) выбрасывает ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = новый ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");// Кол-во столбцовСписок  col = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("Нет столбцов: + col.size ());// Кол-во строкСписок  rows = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Количество строк: + rows.size ()); wd.close (); }}  

Пояснение к коду:

  • Здесь мы сначала объявили объект веб-драйвера «wd» и инициализировали его как драйвер Chrome.
  • Мы используем List для общего количества столбцов в «col».
  • Команды findElements возвращают список ВСЕХ элементов, соответствующих указанному локатору
  • используя findElements и X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th мы получаем все столбцы
  • Аналогично повторяем процесс для рядов.

Выход:

Пример: получение значения ячейки определенной строки и столбца динамической таблицы

Предположим, нам нужна 3- я строка таблицы и данные ее второй ячейки. См. Таблицу ниже.

В приведенной выше таблице данные регулярно обновляются через некоторое время. Данные, которые вы попытаетесь получить, будут отличаться от приведенного выше снимка экрана. Однако код остается прежним. Вот пример программы для получения данных 3- й строки и 2- го столбца.

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import java.util.concurrent.TimeUnit;public class RowandCell {public static void main (String [] args) выбрасывает ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = новый ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");wd.manage (). timeouts (). implicitlyWait (20, TimeUnit.SECONDS);WebElement baseTable = wd.findElement (By.tagName («таблица»));// Найти третью строку таблицыWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));Строка rowtext = tableRow.getText ();System.out.println («Третья строка таблицы:» + текст строки);// чтобы получить данные 2-го столбца 3-й строкиWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));Строковое значениеIneed = cellIneed.getText ();System.out.println ("Значение ячейки: + valueIneed);wd.close ();}}

Пояснение к коду:

  • Таблица размещается с помощью свойства локатора "tagname".
  • Используя XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]" найдите 3- ю строку и получите ее текст с помощью функции getText ()
  • Используя Xpath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]" найдите вторую ячейку в 3- й строке и получите ее текст с помощью функции getText ()

Выход :

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

В этом примере мы получим максимум всех значений в конкретном столбце.

См. Следующую таблицу -

Вот код

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import java.text.NumberFormat;public class MaxFromTable {public static void main (String [] args) выбрасывает ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = новый ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");String max;двойной m = 0, r = 0;//Нет. столбцовСписок  col = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Общее количество столбцов: + col.size ());// Кол-во строкСписок  rows = wd.findElements (By.xpath (".//*[@id='leftcontainer'ght/table/tbody/tr/td[1]")); System.out.println ("Общее количество строк: + rows.size ()); for (int i = 1; i  r) {r = m; }} System.out.println ("Максимальная текущая цена: + r); }}  

Пояснение к коду:

  • Используя драйвер chrome, мы находим веб-таблицу и получаем общее количество строк с помощью XPath ".//*[@id='leftcontainer'ght/table/tbody/tr/td[1]"
  • Используя цикл for, мы перебираем общее количество строк и выбираем значения одно за другим. Чтобы получить следующую строку, мы используем (i + 1) в XPath
  • Мы сравниваем старое значение с новым значением, и максимальное значение печатается в конце цикла for.

Выход

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

Рассмотрим следующую таблицу http://demo.guru99.com/test/table.html

Количество столбцов в каждой строке разное.

Здесь номер строки 1, 2 и 4 состоит из 3 ячеек, в строке номер 3 - 2 ячейки, а в строке номер 5 - 1 ячейку.

Нам нужно получить значения всех ячеек

Вот код:

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import java.util.concurrent.TimeUnit;import org.openqa.selenium.chrome.ChromeDriver;public class NofRowsColmns {public static void main (String [] args) выбрасывает ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = новый ChromeDriver ();wd.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// Чтобы найти таблицу.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// Чтобы найти строки таблицы.Список  rows_table = mytable.findElements (By.tagName ("tr"));// Чтобы вычислить количество строк в таблице.int row_count = row_table.size ();// Цикл будет выполняться до последней строки таблицы.for (int row = 0; row  Columns_row = rows_table.get (row) .findElements (By.tagName ("td"));// Подсчитать количество столбцов (ячеек). В этой конкретной строке.int columns_count = Columns_row.size ();System.out.println («Количество ячеек в строке» + row + «are» + columns_count);// Цикл будет выполняться до последней ячейки этой конкретной строки.for (int column = 0; column 

Пояснение к коду:

  • rows_count дает общее количество строк
  • для каждой строки мы получаем общее количество столбцов с помощью rows_table.get (row) .findElements (By.tagName ("td"));
  • Мы перебираем каждый столбец и каждую строку и получаем значения.

Выход :

Резюме

  • By.xpath () обычно используется для доступа к элементам таблицы.
  • Статические веб-таблицы в Selenium согласованы по своей природе. т.е. у них есть фиксированное количество строк, а также данные ячеек.
  • Динамические веб-таблицы несовместимы, т. Е. Они не имеют фиксированного количества строк и данных ячеек.
  • Используя веб-драйвер selenium, мы можем легко обрабатывать динамические веб-таблицы.
  • Selenium Webdriver позволяет нам получать доступ к динамическим веб-таблицам по их X-пути

Статья подготовлена ​​Канчаном Кулкарни.