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

Зміст:

Anonim

Є два типи таблиць HTML, опублікованих в Інтернеті-

  1. Статичні таблиці : Дані статичні, тобто кількість рядків і стовпців фіксована.
  2. Динамічні таблиці : дані є динамічними, тобто кількість рядків і стовпців НЕ фіксується.

Тепер ми дізнаємося, як обробляти динамічну таблицю в Selenium:

Нижче наведено приклад динамічної веб-таблиці в Selenium для продажів. На основі введених фільтрів дати кількість рядків буде змінено. Отже, це динамічний характер.

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

У цьому підручнику ви дізнаєтесь-

  • Використання X-Path для пошуку елементів веб-таблиці
  • Приклад: Отримати кількість рядків і стовпців із Dynamic WebTable
  • Приклад: Отримати значення комірки певного рядка та стовпця динамічної таблиці
  • Приклад: Отримати максимум усіх значень у стовпці динамічної таблиці
  • Приклад: Отримати всі значення динамічної таблиці

Використання X-Path для пошуку елементів веб-таблиці

Перш ніж ми знайдемо веб-елемент, спочатку давайте зрозуміємо -

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

Веб-елементи - це не що інше, як елементи HTML, такі як текстове поле, перемикачі, що випадають, кнопки подання тощо. Ці елементи HTML записуються з початковим тегом і закінчуються кінцевим тегом.

Наприклад,

Мій перший HTML-документ

.

Кроки для отримання X-шляху веб-елемента, який ми хочемо знайти.

Крок 1) У Chrome перейдіть до http://demo.guru99.com/test/web-table-element.php

Крок 2) Клацніть правою кнопкою миші на веб-елементі, х-шлях якого потрібно отримати. У нашому випадку клацніть правою кнопкою миші на "Компанія" Виберіть параметр Перевірити. З'явиться наступний екран -

Крок 3) Клацніть правою кнопкою миші на виділеному веб-елементі> Виберіть Копіювати -> Копіювати параметр x-path.

Крок 4) Скопіюйте скопійований X-шлях "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" у Selenium WebDriver, щоб знайти елемент.

Приклад: Отримати кількість рядків і стовпців із Dynamic WebTable

Хоча динамічна обробка веб-таблиці в Selenium не може передбачити кількість рядків і стовпців.

За допомогою веб-драйвера Selenium ми можемо знайти

  • Кількість рядків і стовпців веб-таблиці в селені
  • Дані X рядка або Y стовпця.

Нижче наведена програма для отримання загальної кількості рядків і стовпців для обробки веб-таблиці в Selenium:

імпортувати java.text.ParseException;імпортувати java.util.List;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;публічний клас 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");// No стовпцівСписок  col = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("No cols are: + col.size ());// No рядківСписок  рядки = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Кількість рядків: + row.size ()); wd.close (); }}  

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

  • Тут ми вперше оголосили об'єкт веб-драйвера "wd" та ініціалізували його до chrome driver.
  • Ми використовуємо List для загальної кількості стовпців у "col".
  • Команди findElements повертає список ВСІХ елементів, що відповідають вказаному локатору
  • використовуючи findElements та X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th отримуємо всі стовпці
  • Подібним чином ми повторюємо процес для рядків.

Вихід:

Приклад: Отримати значення комірки певного рядка та стовпця динамічної таблиці

Припустимо, нам потрібні 3- й рядок таблиці та дані її другої комірки. Див. Таблицю нижче

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

імпортувати java.text.ParseException;імпортувати java.util.List;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;імпортувати java.util.concurrent.TimeUnit;публічний клас 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 (). неявноWait (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 ("Третій рядок таблиці: + texttext);// для отримання даних 2-го стовпця 3-го рядкаWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));Рядок valueIneed = 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]" знаходимо 2-ю комірку в 3 -му рядку і отримуємо її текст за допомогою функції getText ()

Вихід :

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

У цьому прикладі ми отримаємо максимум усіх значень у певному стовпці.

Зверніться до наступної таблиці -

Ось код

імпортувати java.text.ParseException;імпортувати java.util.List;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;імпортувати java.text.NumberFormat;публічний клас 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");Рядок макс;подвійне m = 0, r = 0;//Ні. колонокСписок  col = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Загальна кількість стовпців: + col.size ());// No рядківСписок  рядки = wd.findElements (By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println ("Загальна кількість рядків: + row.size ()); for (int i = 1; i  r) {r = m; }} System.out.println ("Максимальна поточна ціна: + r); }}  

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

  • За допомогою драйвера chrome ми знаходимо веб-таблицю і отримуємо загальну кількість рядків за допомогою XPath ".//*[@id='leftcontainer']/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 комірку.

Нам потрібно отримати значення всіх клітинок

Ось код:

імпортувати java.text.ParseException;імпортувати java.util.List;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпортувати java.util.concurrent.TimeUnit;імпорт org.openqa.selenium.chrome.ChromeDriver;публічний клас NofRowsColmns {public static void main (String [] args) викидає ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = новий ChromeDriver ();wd.manage (). timeouts (). неявноWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// Знайти таблицю.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// Знайти рядки таблиці.Список  row_table = mytable.findElements (By.tagName ("tr"));// Для обчислення кількості рядків у таблиці.int рядки_рахунок = рядки_таблиця.розмір ();// Цикл буде виконуватися до останнього рядка таблиці.for (int row = 0; row  Columns_row = рядки_таблиця.get (рядок) .findElements (By.tagName ("td"));// Для обчислення кількості стовпців (комірок). У цьому конкретному рядку.int columns_count = Columns_row.size ();System.out.println ("Кількість комірок у рядку" + рядок + "є" + кількість_столбців);// Цикл буде виконуватися до останньої комірки цього конкретного рядка.for (int column = 0; column 

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

  • row_count дає загальну кількість рядків
  • для кожного рядка отримуємо загальну кількість стовпців за допомогою row_table.get (рядок) .findElements (By.tagName ("td"));
  • Ми перебираємо кожен стовпець і кожен рядок і отримуємо значення.

Вихід :

Резюме

  • By.xpath () зазвичай використовується для доступу до елементів таблиці.
  • Статичні веб-таблиці в селені мають єдиний характер. тобто вони мають фіксовану кількість рядків, а також дані клітинки.
  • Динамічні веб-таблиці суперечливі, тобто вони не мають фіксованої кількості рядків і даних комірок.
  • Використовуючи веб-драйвер селену, ми можемо легко обробляти динамічні веб-таблиці.
  • Selenium Webdriver дозволяє нам отримувати доступ до динамічних веб-таблиць за їхнім X-шляхом

Стаття внесена Канчаном Кулкарні.