Esistono due tipi di tabelle HTML pubblicate sul Web:
- Tabelle statiche : i dati sono statici, ovvero il numero di righe e colonne è fisso.
- Tabelle dinamiche : i dati sono dinamici, ovvero il numero di righe e colonne NON è fisso.
Ora impareremo come gestire la tabella dinamica in Selenium:
Di seguito è riportato un esempio di una tabella Web dinamica in Selenium for Sales. In base ai filtri della data di input, il numero di righe verrà modificato. Quindi, è di natura dinamica.
Gestire le tabelle statiche è facile, ma gestire le tabelle dinamiche in Selenium è un po 'difficile in quanto righe e colonne non sono costanti.
In questo tutorial imparerai-
- Utilizzo di X-Path per individuare gli elementi della tabella Web
- Esempio: recupera il numero di righe e colonne da Dynamic WebTable
- Esempio: recupera il valore della cella di una particolare riga e colonna della tabella dinamica
- Esempio: ottieni il massimo di tutti i valori in una colonna della tabella dinamica
- Esempio: ottieni tutti i valori di una tabella dinamica
Utilizzo di X-Path per individuare gli elementi della tabella Web
Prima di individuare l'elemento web, per prima cosa capiamo-
Cos'è un elemento web?
Gli elementi Web non sono altro che elementi HTML come casella di testo, pulsanti di opzione a discesa, pulsanti di invio, ecc. Questi elementi HTML sono scritti con un tag di inizio e termina con un tag di fine .
Per esempio,
Il
Passaggi per ottenere il percorso X dell'elemento web che vogliamo individuare.
Passaggio 1) In Chrome, vai a http://demo.guru99.com/test/web-table-element.php
Passaggio 2) Fare clic con il pulsante destro del mouse sull'elemento Web il cui percorso x deve essere recuperato. Nel nostro caso, fai clic con il pulsante destro del mouse su "Azienda" Seleziona l'opzione Ispeziona. Apparirà la seguente schermata:
Passaggio 3) Fare clic con il pulsante destro del mouse sull'elemento Web evidenziato> Selezionare Copia -> Copia opzione percorso x.
Passaggio 4) Utilizzare il percorso X copiato "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" in Selenium WebDriver per individuare l'elemento.
Esempio: recupera il numero di righe e colonne da Dynamic WebTable
Durante la gestione dinamica delle tabelle web in Selenium, non possiamo prevederne il numero di righe e colonne.
Usando il driver web Selenium, possiamo trovare
- Numero di righe e colonne della tabella web in selenio
- Dati della riga X o della colonna Y.
Di seguito è riportato il programma per il recupero del numero totale di righe e colonne per la gestione della tabella web in 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) genera ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = new ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");//Numero di colonneElencocol = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("Il numero di colonne è: + col.size ());//Numero di righeElenco righe = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Il numero di righe è: + rows.size ()); wd.close (); }}
Spiegazione del codice:
- Qui abbiamo prima dichiarato l'oggetto Web Driver "wd" e inizializzato su chrome driver.
- Usiamo List
per il numero totale di colonne in "col". - I comandi findElements restituiscono un elenco di TUTTI gli elementi che corrispondono al localizzatore specificato
- usando findElements e X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th otteniamo tutte le colonne
- Allo stesso modo, ripetiamo il processo per le righe.
Produzione:
Esempio: recupera il valore della cella di una particolare riga e colonna della tabella dinamica
Supponiamo di aver bisogno della terza riga della tabella e dei dati della sua seconda cella. Vedere la tabella sottostante-
Nella tabella sopra, i dati vengono aggiornati regolarmente dopo un certo periodo di tempo. I dati che proverai a recuperare saranno diversi dallo screenshot qui sopra. Tuttavia, il codice rimane lo stesso. Ecco programma di esempio per ottenere il 3 ° fila e 2 ° dei dati della colonna.
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) genera ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = new 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"));// Per trovare la terza riga della tabellaWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));String rowtext = tableRow.getText ();System.out.println ("Terza riga della tabella: + rowtext);// per ottenere i dati della seconda colonna della terza rigaWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));String valueIneed = cellIneed.getText ();System.out.println ("Il valore della cella è: + valueIneed);wd.close ();}}
Spiegazione del codice:
- La tabella si trova utilizzando la proprietà del localizzatore "tagname".
- Utilizzando XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]" trova la terza riga e ottiene il suo testo usando la funzione getText ()
- L'utilizzo di "[@ id = \ // *" leftcontainer \ "] Xpath / table / tbody / tr [3] / td [2]" trovare la seconda cella in 3 ° funzione fila e prende il testo utilizzando getText ()
Uscita :
Esempio: ottieni il massimo di tutti i valori in una colonna della tabella dinamica
In questo esempio, otterremo il massimo di tutti i valori in una particolare colonna.
Fare riferimento alla tabella seguente -
Ecco il codice
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;classe pubblica MaxFromTable {public static void main (String [] args) genera ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = new ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");String max;doppio m = 0, r = 0;//No. di colonneElencocol = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Il numero totale di colonne è: + col.size ());//Numero di righeElenco righe = wd.findElements (By.xpath (".//*[@id='leftcontainer'”/table/tbody/tr/td[1]")); System.out.println ("Il numero totale di righe è: + rows.size ()); for (int i = 1; i r) {r = m; }} System.out.println ("Il prezzo corrente massimo è: + r); }}
Spiegazione del codice:
- Utilizzando il driver Chrome, individuiamo la tabella web e otteniamo il numero totale di righe utilizzando XPath ".//*[@id='leftcontainer'”/table/tbody/tr/td[1]"
- Usando il ciclo for, iteriamo sul numero totale di righe e recuperiamo i valori uno per uno. Per ottenere la riga successiva usiamo (i + 1) in XPath
- Confrontiamo il vecchio valore con il nuovo valore e il valore massimo viene stampato alla fine del ciclo for
Produzione
Esempio: ottieni tutti i valori di una tabella dinamica
Considera la seguente tabella http://demo.guru99.com/test/table.html
Il numero di colonne per ogni riga è diverso.
Qui le righe numero 1, 2 e 4 hanno 3 celle e la riga numero 3 ha 2 celle e la riga numero 5 ha 1 cella.
Dobbiamo ottenere i valori di tutte le celle
Ecco il codice:
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) genera ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = new ChromeDriver ();wd.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// Per individuare la tabella.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// Per individuare le righe della tabella.Listrows_table = mytable.findElements (By.tagName ("tr"));// Per calcolare il numero di righe nella tabella.int rows_count = rows_table.size ();// Il ciclo verrà eseguito fino all'ultima riga della tabella.for (int row = 0; row Columns_row = rows_table.get (row) .findElements (By.tagName ("td"));// Per calcolare il numero di colonne (celle). In quella riga specifica.int colonne_count = Columns_row.size ();System.out.println ("Numero di celle nella riga" + riga + "sono" + conteggio_colonne);// Il ciclo verrà eseguito fino all'ultima cella di quella riga specifica.for (int colonna = 0; colonna Spiegazione del codice:
- righe_count fornisce il numero totale di righe
- per ogni riga otteniamo il numero totale di colonne utilizzando rows_table.get (row) .findElements (By.tagName ("td"));
- Ripetiamo ogni colonna e ogni riga e recuperiamo i valori.
Uscita :
Sommario
- By.xpath () è comunemente usato per accedere agli elementi della tabella.
- Le tabelle web statiche in selenio sono di natura coerente. cioè hanno un numero fisso di righe così come i dati della cella.
- Le tabelle Web dinamiche sono incoerenti, ovvero non hanno un numero fisso di dati di righe e celle.
- Usando il driver web selenio, possiamo gestire facilmente le tabelle web dinamiche.
- Selenium Webdriver ci consente di accedere a tabelle web dinamiche tramite il loro percorso X.
L'articolo è fornito da Kanchan Kulkarni.