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.
- Statik tablolar: Veriler statiktir yani satır ve sütun sayıları sabittir.
- 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.
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
) 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 –
) 3 Adım Vurgulanan web öğesine sağ tıklayın > Kopyala'yı seçin -> X yolunu kopyala seçeneğini seçin.
) 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:
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ı:
Ö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-
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.
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ı:
Ö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 –
İşte 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) 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ı
Örnek: Dinamik Tablonun tüm değerlerini alma
Aşağıdaki tabloyu düşünün: https://demo.guru99.com/test/table.html
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:
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ı:
Ö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