Kuidas hallata dünaamilisi veebitabeleid Selenium
Veebitabel sisse Selenium
Veebis avaldatakse kahte tüüpi HTML-tabeleid -
- Staatilised tabelid: Andmed on staatilised, st ridade ja veergude arv on fikseeritud.
- Dünaamilised tabelid: Andmed on dünaamilised, st ridade ja veergude arv EI OLE fikseeritud.
Dünaamilise tabeli käsitlemine Selenium
Allpool on näide dünaamilise veebitabeli kohta Selenium müügiks. Sisestuskuupäeva filtrite põhjal muudetakse ridade arvu. Seega on see oma olemuselt dünaamiline.
Staatiliste tabelite käsitlemine on lihtne, kuid dünaamiliste tabelitega Selenium on veidi keeruline, kuna read ja veerud ei ole konstantsed.
X-Pathi kasutamine veebitabeli elementide leidmiseks
Enne veebielemendi leidmist mõistame kõigepealt
Mis on veebielement?
Veebielemendid pole muud kui HTML-elemendid, nagu tekstikast, rippmenüüde raadionupud, esitamisnupud jne. Need HTML-i elemendid on kirjutatud algus silt ja lõpeb an-ga lõpp tag.
Näiteks,
Minu esimene HTML-dokument.
Meetmed selle veebielemendi X-tee leidmiseks, mille asukohta soovime.
Step 1) Avage Chrome'is https://demo.guru99.com/test/web-table-element.php
Step 2) Paremklõps veebielemendil, mille x-tee tuuakse. Meie puhul paremklõpsake "Ettevõte" Valige suvand Kontrolli. Kuvatakse järgmine ekraan –
Step 3) Paremklõpsake esiletõstetud veebielemendil > valige suvand Kopeeri -> Kopeeri x-tee.
Step 4) Kasutage kopeeritud X-teed „//*[@id=”leftcontainer”]/table/thead/tr/th [1] Selenium WebDriver elemendi asukoha leidmiseks.
Näide: tooge dünaamilise veebitabeli ridade ja veergude arv
Dünaamilise veebitabeli käsitlemise ajal Selenium, me ei saa ennustada selle ridade ja veergude arvu.
Kasutamine Selenium veebidraiveri, leiame
- Veebitabeli ridade ja veergude arv Selenium
- X rea või Y veeru andmed.
Allpool on programm ridade ja veergude koguarvu toomiseks veebitabeli käsitlemiseks 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(); } }
Koodi selgitus:
- Siin oleme esmalt deklareerinud veebidraiveri objekti "wd" &initsialiseerinud selle kroomi draiveriks.
- Kasutame nimekirja veergude koguarvuni.
- käsud findElements tagastab KÕIKIDE elementide loendi, mis vastavad määratud lokaatorile
- kasutades findElements ja X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th saame kõik veerud
- Samamoodi kordame protsessi ridade jaoks.
Väljund:
Näide: tooge dünaamilise tabeli konkreetse rea ja veeru lahtri väärtus
Oletame, et vajame 3rd tabeli rida ja selle teise lahtri andmed. Vaata allolevat tabelit -
Ülaltoodud tabelis värskendatakse andmeid teatud aja möödudes regulaarselt. Andmed, mida proovite tuua, erinevad ülaltoodud ekraanipildist. Kood jääb aga samaks. Siin on näidisprogramm 3rd rida ja 2nd veeru andmed.
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(); } }
Koodi selgitus:
- Tabel asub asukoha atribuudi "tagname" abil.
- Kasutamine XPath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” leidke 3rd rida ja hangib selle teksti funktsiooni getText () abil
- Kasutades Xpathi „//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2], leidke lahtris 2 teine lahterrd rida ja hangib selle teksti funktsiooni getText () abil
Väljund:
Näide: hankige dünaamilise tabeli veerus olevate väärtuste maksimum
Selles näites saame konkreetse veeru kõigi väärtuste maksimumi.
Vaadake järgmist tabelit -
Siin on kood
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>
Koodi selgitus:
- Chrome'i draiveri abil leiame veebitabeli ja saame XPathi abil ridade koguarvu ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
- Kasutades tsüklit, kordame ridade koguarvu ja hangime väärtusi ükshaaval. Järgmise rea saamiseks kasutame XPathis (i+1).
- Võrdleme vana väärtust uue väärtusega ja maksimaalne väärtus trükitakse tsükli lõppu
Väljund
Näide: hankige kõik dünaamilise tabeli väärtused
Mõelge järgmisele tabelile: https://demo.guru99.com/test/table.html
Iga rea veergude arv on erinev.
Siin on ridadel 1, 2 ja 4 3 lahtrit ning real 3 on 2 lahtrit ja real 5 on 1 lahter.
Peame saama kõigi rakkude väärtused
Siin on kood:
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("-------------------------------------------------- "); } } }
Koodi selgitus:
- ridade_arv annab ridade koguarvu
- iga rea kohta saame veergude koguarvu kasutades
rows_table.get(row).findElements(By.tagName("td"));
- Kordame läbi iga veeru ja iga rea ning toome väärtused.
Väljund:
kokkuvõte
- By.xpath() kasutatakse tavaliselt tabelielementidele juurdepääsuks.
- Staatilised veebitabelid sisse Selenium on oma olemuselt järjekindlad. st neil on fikseeritud ridade arv ja ka rakuandmed.
- Dünaamilised veebitabelid on ebajärjekindlad, st neil pole fikseeritud ridade ja lahtrite arvu.
- Seleeni veebidraiverit kasutades saame hõlpsalt hakkama dünaamiliste veebitabelitega.
- Selenium Veebidraiver võimaldab meil nende kaudu juurde pääseda dünaamilistele veebitabelitele X-tee. Seleenis veebitabeli käsitlemise mõistmine on tõhusa automatiseerimise testimise jaoks ülioluline.