Dinamik Web Tablolarını Kullanma Selenium Web Sürücüsü

Web Tablosu Selenium

Web'de yayınlanan iki tür HTML tablosu vardır.

  1. Statik tablolar: Veriler statiktir yani satır ve sütun sayıları sabittir.
  2. Dinamik tablolar: Veri dinamiktir, yani satır ve sütun sayısı sabit DEĞİLDİR.

Dinamik Tablo Nasıl Kullanılır? Selenium

Aşağıda dinamik bir web tablosu örneği verilmiştir. Selenium indirimde. Giriş tarihi filtrelerine bağlı olarak satır sayısı değiştirilecektir. Yani doğası gereği dinamiktir.

Dinamik Tabloyu İşle Selenium

Statik tabloyu yönetmek kolaydır, ancak dinamik tabloları yönetmek Selenium satırlar ve sütunlar sabit olmadığı için biraz zordur.

Web Tablosu Öğelerini Bulmak için X-Path Kullanma

Web öğesini bulmadan önce şunu anlayalım:

Web öğesi nedir?

Web öğeleri, metin kutusu, açılır radyo düğmeleri, gönder düğmeleri vb. gibi HTML öğelerinden başka bir şey değildir. Bu HTML öğeleri, başlama etiketi ve bir ile bitiyor son etiketi.

Örneğin,

İlk HTML Belgem.

Bulmak istediğimiz web öğesinin X yolunu alma adımları.

) 1 Adım Chrome'da şuraya gidin: https://demo.guru99.com/test/web-table-element.php

Web Tablosu Öğelerini Bulmak için X-Path Kullanma

) 2 Adım X-path'i alınacak web öğesine sağ tıklayın. Bizim durumumuzda, “Şirket”e sağ tıklayın. Denetle seçeneğini seçin. Aşağıdaki ekran gösterilecektir –

Web Tablosu Öğelerini Bulmak için X-Path Kullanma

) 3 Adım Vurgulanan web öğesine sağ tıklayın > Kopyala'yı seçin -> X yolunu kopyala seçeneğini seçin.

Web Tablosu Öğelerini Bulmak için X-Path Kullanma

) 4 Adım Kopyalanan X-yolunu kullanın: “//*[@id=”leftcontainer”]/table/thead/tr/th [1]” Selenium Öğeyi bulmak için WebDriver.

Örnek: Dinamik WebTable'dan satır ve sütun sayısını getirme

Dinamik web tablosunu işlerken Seleniumsatır ve sütun sayısını tahmin edemiyoruz.

kullanma Selenium web sürücüsünü bulabiliriz

  • Web tablosunun satır ve sütun sayısı Selenium
  • X satırının veya Y sütununun verileri.

Aşağıda web tablosunu işlemek için toplam satır ve sütun sayısını getiren program bulunmaktadır. Selenium:

Satır ve Sütun Sayısını Getir

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) throws ParseException {
    	WebDriver wd;
	  System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
	  wd= new ChromeDriver();
        wd.get("https://demo.guru99.com/test/web-table-element.php");         
        //No.of Columns
        List <webelement> col = wd.findElements(By.xpath(".//*[@id=\"leftcontainer\"]/table/thead/tr/th"));
        System.out.println("No of cols are : " +col.size()); 
        //No.of rows 
        List <webelement> rows = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); 
        System.out.println("No of rows are : " + rows.size());
        wd.close();
    }
}

Kod Açıklaması:

  • Burada ilk olarak Web Sürücüsü nesnesini “wd” olarak ilan ettik ve onu chrome sürücüsüne başlattık.
  • Listeyi kullanıyoruz “col” içindeki toplam sütun sayısına.
  • findElements komutları, belirtilen bulucuyla eşleşen TÜM öğelerin bir listesini döndürür
  • findElements ve X-path kullanarak //*[@id=\”leftcontainer\”]/table/thead/tr/th tüm sütunları alıyoruz
  • Benzer şekilde satırlar için de işlemi tekrarlıyoruz.

Çıktı:

Satır ve Sütun Sayısını Getir

Örnek: Dinamik Tablonun belirli bir satırının ve sütununun hücre değerini getirme

Diyelim ki 3'e ihtiyacımız varrd tablonun satırı ve ikinci hücresinin verileri. Aşağıdaki tabloya bakın-

Belirli Bir Satır ve Sütunun Hücre Değerini Getir

Yukarıdaki tabloda veriler belirli bir süre sonra düzenli olarak güncellenmektedir. Almaya çalıştığınız veriler yukarıdaki ekran görüntüsünden farklı olacaktır. Ancak kod aynı kalıyor. İşte 3'ü almak için örnek programrd satır ve 2nd sütunun verileri.

Belirli Bir Satır ve Sütunun Hücre Değerini Getir

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) throws ParseException {
    	WebDriver wd;
		System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
		 wd= new ChromeDriver();
		 wd.get("https://demo.guru99.com/test/web-table-element.php"); 
		 wd.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
		 WebElement baseTable = wd.findElement(By.tagName("table"));
		  
		 //To find third row of table
		 WebElement tableRow = baseTable.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]"));
         String rowtext = tableRow.getText();
		 System.out.println("Third row of table : "+rowtext);
		    
		    //to get 3rd row's 2nd column data
		    WebElement cellIneed = tableRow.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]/td[2]"));
		    String valueIneed = cellIneed.getText();
		    System.out.println("Cell value is : " + valueIneed); 
		    wd.close();
    }
}

Kod Açıklaması:

  • Tablo, “etiket adı” konum belirleyici özelliği kullanılarak yerleştirilir.
  • kullanma XPath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” 3'ü bulunrd satırı alır ve getText () işlevini kullanarak metnini alır
  • Xpath kullanarak “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2]” 2'teki 3. hücreyi bulunrd satırı alır ve getText () işlevini kullanarak metnini alır

Çıktı:

Dinamik Tablonun Belirli Bir Satırının ve Sütununun Hücre Değerini Getir

Örnek: Dinamik Tablonun Bir Sütunundaki Tüm Değerlerin Maksimumunu Alma

Bu örnekte belirli bir sütundaki tüm değerlerin maksimumunu alacağız.

Aşağıdaki tabloya bakın –

Dinamik Tablo Sütunundaki Tüm Değerlerin Maksimumunu Alın

İşte kod

Dinamik Tablo Sütunundaki Tüm Değerlerin Maksimumunu Alın

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) throws ParseException {
    	WebDriver wd;
		System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
		 wd= new ChromeDriver();
		 wd.get("https://demo.guru99.com/test/web-table-element.php"); 
		 String max;
	     double m=0,r=0;
		 
	       //No. of Columns
	        List <webelement> col = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/thead/tr/th"));
	        System.out.println("Total No of columns are : " +col.size());
	        //No.of rows
	        List <webelement> rows = wd.findElements(By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]"));
	        System.out.println("Total No of rows are : " + rows.size());
	        for (int i =1;i<rows.size();i++)
	        {    
	            max= wd.findElement(By.xpath("html/body/div[1]/div[5]/table/tbody/tr[" + (i+1)+ "]/td[4]")).getText();
	            NumberFormat f =NumberFormat.getNumberInstance(); 
	            Number num = f.parse(max);
	            max = num.toString();
	            m = Double.parseDouble(max);
	            if(m>r)
	             {    
	                r=m;
	             }
	        }
	        System.out.println("Maximum current price is : "+ r);
    }
}

</webelement></webelement>

Kod Açıklaması:

  • Chrome sürücüsünü kullanarak web tablosunu buluyoruz ve XPath “.//*[@id='leftcontainer']/table/tbody/tr/td[1]” kullanarak toplam satır sayısını alıyoruz.
  • For döngüsünü kullanarak toplam satır sayısını yineliyoruz ve değerleri birer birer getiriyoruz. Sonraki satırı almak için XPath'ta (i+1) kullanıyoruz
  • Eski değeri yeni değerle karşılaştırırız ve maksimum değer for döngüsünün sonunda yazdırılır

Çıktı

Dinamik Tablo Sütunundaki Tüm Değerlerin Maksimumunu Alın

Örnek: Dinamik Tablonun tüm değerlerini alma

Aşağıdaki tabloyu düşünün: https://demo.guru99.com/test/table.html

Dinamik Tablonun tüm değerlerini alın

Her satırın sütun sayısı farklıdır.

Burada 1, 2 ve 4 numaralı satırlarda 3 hücre, 3 numaralı satırda 2 hücre, 5 numaralı satırda ise 1 hücre bulunmaktadır.

Tüm hücrelerin değerlerini almamız gerekiyor

İşte kod:

Dinamik Tablonun Tüm Değerlerini Alın

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) throws ParseException {
    	WebDriver wd;
    	System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
    	wd = new ChromeDriver();
    	wd.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    	wd.get("https://demo.guru99.com/test/table.html");
    	//To locate table.
    	WebElement mytable = wd.findElement(By.xpath("/html/body/table/tbody"));
    	//To locate rows of table. 
    	List < WebElement > rows_table = mytable.findElements(By.tagName("tr"));
    	//To calculate no of rows In table.
    	int rows_count = rows_table.size();
    	//Loop will execute till the last row of table.
    	for (int row = 0; row < rows_count; row++) {
    	    //To locate columns(cells) of that specific row.
    	    List < WebElement > Columns_row = rows_table.get(row).findElements(By.tagName("td"));
    	    //To calculate no of columns (cells). In that specific row.
    	    int columns_count = Columns_row.size();
    	    System.out.println("Number of cells In Row " + row + " are " + columns_count);
    	    //Loop will execute till the last cell of that specific row.
    	    for (int column = 0; column < columns_count; column++) {
    	        // To retrieve text from that specific cell.
    	        String celtext = Columns_row.get(column).getText();
    	        System.out.println("Cell Value of row number " + row + " and column number " + column + " Is " + celtext);
    	    }
    	    System.out.println("-------------------------------------------------- ");
    	}
   	}
}

Kod Açıklaması:

  • row_count toplam satır sayısını verir
  • kullanarak her satır için toplam sütun sayısını alıyoruz. rows_table.get(row).findElements(By.tagName("td"));
  • Her sütunu ve her satırı yineliyoruz ve değerleri getiriyoruz.

Çıktı:

Dinamik Tablonun Tüm Değerlerini Alın

ÖZET

  • By.xpath() genellikle tablo öğelerine erişmek için kullanılır.
  • Statik web tabloları Selenium doğası gereği tutarlıdır. yani Hücre verilerinin yanı sıra sabit sayıda satıra da sahipler.
  • Dinamik web tabloları tutarsızdır, yani sabit sayıda satır ve hücre verisine sahip değildirler.
  • Selenium web sürücüsünü kullanarak dinamik web tablolarını kolaylıkla işleyebiliriz.
  • Selenium Web sürücüsü, dinamik web tablolarına erişmemizi sağlar. X yolu

Devamını Oku readmore