Obsługa dynamicznych tabel internetowych za pomocą Selenium WebDriver

Spisie treści:

Anonim

Istnieją dwa typy tabel HTML publikowanych w Internecie:

  1. Tabele statyczne : dane są statyczne, tzn. Liczba wierszy i kolumn jest stała.
  2. Tabele dynamiczne : dane są dynamiczne, tj. Liczba wierszy i kolumn NIE jest ustalona.

Teraz nauczymy się obsługiwać tabelę dynamiczną w Selenium:

Poniżej znajduje się przykład dynamicznej tabeli internetowej w Selenium for Sales. Na podstawie filtrów danych wejściowych liczba wierszy zostanie zmieniona. Tak więc ma charakter dynamiczny.

Obsługa tabel statycznych jest łatwa, ale obsługa tabel dynamicznych w Selenium jest trochę trudna, ponieważ wiersze i kolumny nie są stałe.

W tym samouczku nauczysz się:

  • Używanie ścieżki X do lokalizowania elementów tabeli sieci Web
  • Przykład: pobierz liczbę wierszy i kolumn z Dynamic WebTable
  • Przykład: pobierz wartość komórki z określonego wiersza i kolumny tabeli dynamicznej
  • Przykład: Uzyskaj maksimum wszystkich wartości w kolumnie tabeli dynamicznej
  • Przykład: pobierz wszystkie wartości z tabeli dynamicznej

Używanie ścieżki X do lokalizowania elementów tabeli sieci Web

Zanim zlokalizujemy element sieciowy, najpierw zrozumiemy -

Co to jest element sieciowy?

Elementy internetowe to nic innego jak elementy HTML, takie jak pole tekstowe, przyciski opcji listy rozwijanej, przyciski przesyłania itp. Te elementy HTML są napisane ze znacznikiem początkowym i zakończone znacznikiem końcowym .

Na przykład,

Mój pierwszy dokument HTML

.

Kroki w celu uzyskania ścieżki X elementu sieci, który chcemy zlokalizować.

Krok 1) W przeglądarce Chrome przejdź do http://demo.guru99.com/test/web-table-element.php

Krok 2) Kliknij prawym przyciskiem myszy element sieciowy, którego ścieżka x ma zostać pobrana. W naszym przypadku kliknij prawym przyciskiem myszy „Firma” Wybierz opcję Sprawdź. Pojawi się następujący ekran -

Krok 3) Kliknij prawym przyciskiem myszy podświetlony element sieciowy> Wybierz opcję Kopiuj -> Kopiuj x-path.

Krok 4) Użyj skopiowanej ścieżki X "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" w Selenium WebDriver, aby zlokalizować element.

Przykład: pobierz liczbę wierszy i kolumn z Dynamic WebTable

Podczas dynamicznej obsługi tabel internetowych w Selenium nie możemy przewidzieć liczby wierszy i kolumn.

Korzystając ze sterownika sieciowego Selenium, możemy znaleźć

  • Liczba wierszy i kolumn tabeli internetowej w Selenium
  • Dane wiersza X lub kolumny Y.

Poniżej znajduje się program do pobierania całkowitej liczby wierszy i kolumn do obsługi tabeli internetowej w 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) rzuca ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nowy ChromeDriver ();wd.get („http://demo.guru99.com/test/web-table-element.php”);//No.of ColumnsLista  col = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("Liczba kolumn to: + col.size ());// Liczba wierszyLista  wiersze = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Liczba wierszy to: + rows.size ()); wd.close (); }}  

Objaśnienie kodu:

  • Tutaj najpierw zadeklarowaliśmy obiekt sterownika sieciowego „wd” i zainicjowaliśmy go w sterowniku chrome.
  • Używamy List do całkowitej liczby kolumn w „col”.
  • Polecenia findElements zwracają listę WSZYSTKICH elementów pasujących do określonego lokalizatora
  • używając findElements i X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th otrzymujemy wszystkie kolumny
  • Podobnie powtarzamy proces dla wierszy.

Wynik:

Przykład: pobierz wartość komórki z określonego wiersza i kolumny tabeli dynamicznej

Załóżmy, że potrzebujemy 3 rd wiersz tabeli i danych jego drugiej komórki. Zobacz tabelę poniżej

W powyższej tabeli dane są regularnie aktualizowane po pewnym czasie. Dane, które próbujesz odzyskać, będą się różnić od przedstawionych na powyższym zrzucie ekranu. Jednak kod pozostaje ten sam. Oto przykładowy program, aby uzyskać 3 rd wiersz i 2 nd danych kolumny.

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) rzuca ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nowy 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 ("table"));// Aby znaleźć trzeci wiersz tabeliWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));String rowtext = tableRow.getText ();System.out.println ("Trzeci wiersz tabeli: + tekst wiersza);// aby uzyskać dane z drugiej kolumny w trzecim wierszuWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));String valueIneed = cellIneed.getText ();System.out.println ("Wartość komórki to: + valueIneed);wd.close ();}}

Objaśnienie kodu:

  • Tabela jest umieszczana przy użyciu właściwości lokalizatora "zmienna".
  • Za pomocą "// * [@ id = \" leftcontainer \ "] / / TBODY / tr [3] W tabeli" Znajdź 3 XPath rd wiersza i zostaje nim tekstu getText () funkcji
  • Za pomocą "// * [@ id = \" leftcontainer \ "] / / TBODY / tr [3] stołu / td [2]" xPath znaleźć 2. komórki w 3 -cim funkcji rzędu i dostaje nim tekstu getText ()

Dane wyjściowe :

Przykład: Uzyskaj maksimum wszystkich wartości w kolumnie tabeli dynamicznej

W tym przykładzie otrzymamy maksimum wszystkich wartości w określonej kolumnie.

Zapoznaj się z poniższą tabelą -

Oto kod

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) rzuca ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nowy ChromeDriver ();wd.get („http://demo.guru99.com/test/web-table-element.php”);Ciąg max;podwójne m = 0, r = 0;//Nie. kolumnLista  col = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Łączna liczba kolumn to: + col.size ());// Liczba wierszyLista  rows = wd.findElements (By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println ("Łączna liczba wierszy to: + rows.size ()); for (int i = 1; i  r) {r = m; }} System.out.println ("Maksymalna aktualna cena to: + r); }}  

Objaśnienie kodu:

  • Korzystając ze sterownika Chrome, lokalizujemy tabelę internetową i uzyskujemy całkowitą liczbę wierszy przy użyciu XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
  • Używając pętli for, iterujemy przez całkowitą liczbę wierszy i pobieramy wartości jeden po drugim. Aby uzyskać następny wiersz, używamy (i + 1) w XPath
  • Porównujemy starą wartość z nową wartością, a wartość maksymalna jest wypisywana na końcu pętli for

Wynik

Przykład: pobierz wszystkie wartości z tabeli dynamicznej

Rozważ następującą tabelę http://demo.guru99.com/test/table.html

Liczba kolumn w każdym wierszu jest inna.

W tym przypadku wiersz numer 1, 2 i 4 ma 3 komórki, a wiersz 3 ma 2 komórki, a wiersz numer 5 ma 1 komórkę.

Musimy uzyskać wartości wszystkich komórek

Oto kod:

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) rzuca ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nowy ChromeDriver ();wd.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);wd.get („http://demo.guru99.com/test/table.html”);// Aby zlokalizować tabelę.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// Aby zlokalizować wiersze tabeli.List  rows_table = mytable.findElements (By.tagName ("tr"));// Aby obliczyć liczbę wierszy w tabeli.int row_count = rows_table.size ();// Pętla będzie wykonywana do ostatniego wiersza tabeli.for (int row = 0; row  Columns_row = rows_table.get (row) .findElements (By.tagName ("td"));// Aby obliczyć liczbę kolumn (komórek). W tym konkretnym rzędzie.int column_count = Columns_row.size ();System.out.println ("Liczba komórek w rzędzie" + rząd + "to" + liczba_kolumn);// Pętla będzie wykonywana do ostatniej komórki w tym konkretnym wierszu.for (int column = 0; column 

Objaśnienie kodu:

  • liczba_wierszów podaje całkowitą liczbę wierszy
  • dla każdego wiersza otrzymujemy całkowitą liczbę kolumn za pomocą row_table.get (row) .findElements (By.tagName ("td"));
  • Iterujemy przez każdą kolumnę i każdy wiersz i pobieramy wartości.

Dane wyjściowe :

Podsumowanie

  • By.xpath () jest powszechnie używana do uzyskiwania dostępu do elementów tabeli.
  • Statyczne tabele internetowe w Selenium mają spójny charakter. tj. mają stałą liczbę wierszy, a także dane komórki.
  • Dynamiczne tabele internetowe są niespójne, tj. Nie mają ustalonej liczby wierszy i komórek danych.
  • Korzystając ze sterownika sieciowego selenu, możemy łatwo obsługiwać dynamiczne tabele internetowe.
  • Selenium Webdriver umożliwia nam dostęp do dynamicznych tabel internetowych za pomocą ich ścieżki X.

Artykuł jest autorstwa Kanchana Kulkarniego.