Работа с динамични уеб таблици с помощта на 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-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");// Брой колониСписък  col = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("Брой колички са: + col.size ());// Брой редовеСписък  редове = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Брой редове са: + редове.размер ()); wd.close (); }}  

Обяснение на кода:

  • Тук първо декларирахме обекта на уеб драйвер „wd“ и го инициализирахме в chrome драйвер.
  • Използваме 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 (). implicitlyWait (20, TimeUnit.SECONDS);WebElement baseTable = wd.findElement (By.tagName ("таблица"));// За намиране на трети ред на таблицатаWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));String rowtext = tableRow.getText ();System.out.println ("Трети ред на таблицата: + редтекст);// за получаване на данни от 2-ра колона на 3-ти редWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));String 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");String max;двойно m = 0, r = 0;//Не. на колониСписък  col = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Общ брой колони са: + col.size ());// Брой редовеСписък  редове = wd.findElements (By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println ("Общ брой редове са: + редове.размер ()); за (int i = 1; i <редове.размер (); i ++) {max = wd.findElement (By.xpath ("html / body / div [1] / div [5] / table / tbody / tr [" + (i + 1) + "] / td [4]")). getText (); NumberFormat f = NumberFormat.getNumberInstance (); Номер num = f.parse (макс.); max = num.toString (); m = Double.parseDouble (макс.); ако (m> 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 (). implicitlyWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// За намиране на таблица.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// За намиране на редове на таблица.Списък  редове_таблица = mytable.findElements (By.tagName ("tr"));// За изчисляване на брой редове в таблица.int редове_ броя = редове_таблица.размер ();// Цикълът ще се изпълни до последния ред на таблицата.за (int ред = 0; ред <брой_редове; ред ++) {// За намиране на колони (клетки) от този конкретен ред.Списък  Columns_row = редове_таблица.get (ред) .findElements (By.tagName ("td"));// За изчисляване на брой колони (клетки). В този конкретен ред.int columns_count = Columns_row.size ();System.out.println ("Брой клетки в ред" + ред + "са" + броя_колони);// Цикълът ще се изпълни до последната клетка от този конкретен ред.за (int колона = 0; колона <брой_колони; колона ++) {// За извличане на текст от тази конкретна клетка.Низ celtext = Columns_row.get (колона) .getText ();System.out.println ("Стойност на клетката на номер на ред" + ред + "и номер на колона" + колона + "Is" + цели текст);}System.out.println ("------------------------------------------- ------- ");}}}

Обяснение на кода:

  • row_count дава общия брой редове
  • за всеки ред получаваме общия брой колони, използвайки row_table.get (row) .findElements (By.tagName ("td"));
  • Преглеждаме всяка колона и всеки ред и извличаме стойности.

Изход :

Обобщение

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

Статията е предоставена от Kanchan Kulkarni.