सेलेनियम वेबड्राइवर का उपयोग करके गतिशील वेब टेबल्स को संभालना

विषय - सूची:

Anonim

वेब पर दो प्रकार की HTML टेबल प्रकाशित हैं-

  1. स्टैटिक टेबल : डेटा स्टैटिक है यानी पंक्तियों और कॉलमों की संख्या तय की जाती है।
  2. डायनेमिक टेबल : डेटा डायनामिक होता है अर्थात पंक्तियों और कॉलमों की संख्या निश्चित नहीं होती है।

अब, हम सीखेंगे कि सेलेनियम में डायनेमिक टेबल को कैसे संभाला जाए:

नीचे बिक्री के लिए सेलेनियम में एक गतिशील वेब तालिका का एक उदाहरण है। इनपुट दिनांक फ़िल्टर के आधार पर, पंक्तियों की संख्या में परिवर्तन होगा। तो, यह प्रकृति में गतिशील है।

स्थिर तालिका को संभालना आसान है, लेकिन सेलेनियम में गतिशील तालिकाओं को संभालना थोड़ा मुश्किल है क्योंकि पंक्तियाँ और स्तंभ स्थिर नहीं हैं।

इस ट्यूटोरियल में, आप सीखेंगे-

  • वेब तालिका तत्वों का पता लगाने के लिए एक्स-पथ का उपयोग करना
  • उदाहरण: डायनामिक वेबटेबल से पंक्तियों और स्तंभों की संख्या प्राप्त करें
  • उदाहरण: डायनामिक टेबल की एक विशेष पंक्ति और स्तंभ का सेल मान
  • उदाहरण: डायनेमिक टेबल के एक कॉलम में सभी मानों की अधिकतम प्राप्त करें
  • उदाहरण: डायनेमिक टेबल के सभी मान प्राप्त करें

वेब तालिका तत्वों का पता लगाने के लिए एक्स-पथ का उपयोग करना

वेब तत्व का पता लगाने से पहले, आइए समझते हैं-

एक वेब तत्व क्या है?

वेब तत्व कुछ भी नहीं हैं लेकिन HTML तत्व जैसे टेक्स्टबॉक्स, ड्रॉपडाउन रेडियो बटन, सबमिट बटन इत्यादि। ये HTML तत्व स्टार्ट टैग के साथ लिखे जाते हैं और एंड टैग के साथ समाप्त होते हैं ।

उदाहरण के लिए,

मेरा पहला HTML दस्तावेज़

वेब तत्व का एक्स-पथ प्राप्त करने के लिए कदम जिसे हम खोजना चाहते हैं।

चरण 1) क्रोम में, http://demo.guru99.com/test/web-table-element.php पर जाएं

चरण 2) वेब तत्व पर राइट क्लिक करें जिसका एक्स-पथ प्राप्त किया जाना है। हमारे मामले में, "कंपनी" चुनें निरीक्षण विकल्प पर राइट क्लिक करें। निम्न स्क्रीन दिखाई जाएगी -

चरण 3) हाइलाइट किए गए वेब तत्व पर राइट क्लिक करें> कॉपी का चयन करें -> कॉपी एक्स-पाथ विकल्प।

चरण 4) तत्व का पता लगाने के लिए सेलेनियम वेबड्राइवर में कॉपी किए गए एक्स-पथ का उपयोग करें "// * [@ id =" leftcontainer "] / टेबल / थ्रेड / tr / th [1]।

उदाहरण: डायनामिक वेबटेबल से पंक्तियों और स्तंभों की संख्या प्राप्त करें

सेलेनियम में गतिशील वेब टेबल से निपटने के दौरान, हम इसकी पंक्तियों और स्तंभों की संख्या की भविष्यवाणी नहीं कर सकते।

सेलेनियम वेब ड्राइवर का उपयोग करके, हम पा सकते हैं

  • सेलेनियम में पंक्तियों की संख्या और वेब तालिका के स्तंभ
  • एक्स पंक्ति या वाई कॉलम का डेटा।

नीचे सेलेनियम में वेब टेबल को संभालने के लिए कुल पंक्तियों और स्तंभों को लाने का कार्यक्रम है:

आयात java.text.ParseException;आयात java.util.ist;आयात org.openqa.selenium.By;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.WebElement;आयात org.openqa.selenium.chrome.ChromeDriver;सार्वजनिक वर्ग Noofrowsandcols {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) 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");//No.of कॉलमसूची  col = wd.findElements (By.xpath (".//* on@ id = \" leftcontainer \ "] / टेबल / थ्रेड / tr / th");System.out.println ("कर्नल की संख्या नहीं हैं: + col.size ());//No.of पंक्तियाँसूची  पंक्तियाँ = wd.findElements (By.xpath (".//* ई@ आईडी = 'वामपन्थी'] / टेबल / tbody / tr / td [1]")); System.out.println ("पंक्तियों की संख्या नहीं है: + row.size ()); wd.close (); }}  

कोड स्पष्टीकरण:

  • यहाँ हमने सबसे पहले Web Driver object "wd" घोषित किया है और इसे chrome ड्राइवर में इनिशियलाइज़ किया है।
  • हम "कॉल" में कुल स्तंभों की सूची का उपयोग करते हैं।
  • findElements कमांड निर्दिष्ट लोकेटर से मेल खाते सभी तत्वों की एक सूची देता है
  • FindElements और X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th का उपयोग करके हम सभी कॉलम प्राप्त करते हैं
  • इसी तरह, हम पंक्तियों के लिए प्रक्रिया को दोहराते हैं।

आउटपुट:

उदाहरण: डायनामिक टेबल की एक विशेष पंक्ति और स्तंभ का सेल मान

चलो मान लेते हैं कि हम 3 की जरूरत वां तालिका की पंक्ति और अपने दूसरे सेल के डेटा। नीचे दी गई तालिका देखें-

उपरोक्त तालिका में, कुछ समय के बाद डेटा नियमित रूप से अपडेट किया जाता है। आपके द्वारा पुनर्प्राप्त किया गया डेटा उपरोक्त स्क्रीनशॉट से अलग होगा। हालाँकि, कोड समान रहता है। यहां 3 आरडी पंक्ति और 2 एनडी कॉलम डेटा प्राप्त करने के लिए नमूना कार्यक्रम है ।

आयात java.text.ParseException;आयात java.util.ist;आयात org.openqa.selenium.By;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.WebElement;आयात org.openqa.selenium.chrome.ChromeDriver;आयात java.util.concurrent.TimeUnit;सार्वजनिक वर्ग रोवांडसेल {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) 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 ()। टाइमआउट ()। निहितार्थ (20, TimeUnit.SECONDS);WebElement baseTable = wd.findElement (By.tagName ("टेबल"));// तालिका की तीसरी पंक्ति खोजने के लिएWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / टेबल / tbody / tr [3]"));स्ट्रिंग रोयटेक्स्ट = tableRow.getText ();System.out.println ("तालिका की तीसरी पंक्ति: + rowtext);// तीसरी पंक्ति का दूसरा कॉलम डेटा प्राप्त करने के लिएWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / टेबल / tbody / tr [3] / td [2]"));स्ट्रिंग valueIneed = cellIneed.getText ();System.out.println ("सेल मान है: + valueIneed);wd.close ();}}

कोड स्पष्टीकरण:

  • तालिका लोकेटर संपत्ति "tagname" का उपयोग करके स्थित है।
  • XPath का उपयोग करके "// * [@ id = \" leftcontainer \ "] / टेबल / tbody / tr [3]" 3 rd पंक्ति ढूंढें और getText () फ़ंक्शन का उपयोग करके इसका पाठ प्राप्त करें
  • Xpath "// * [@ आईडी = \" leftcontainer \ "] / तालिका / tbody / tr [3] / td [2]" 3 में 2 सेल को खोजने का उपयोग करते हुए तृतीय पंक्ति और हो जाता है उसके पाठ gettext का उपयोग कर () फ़ंक्शन

आउटपुट :

उदाहरण: डायनेमिक टेबल के एक कॉलम में सभी मानों की अधिकतम प्राप्त करें

इस उदाहरण में, हम किसी विशेष कॉलम में सभी मानों का अधिकतम लाभ प्राप्त करेंगे।

निम्न तालिका देखें -

यहाँ कोड है

आयात java.text.ParseException;आयात java.util.ist;आयात org.openqa.selenium.By;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.WebElement;आयात org.openqa.selenium.chrome.ChromeDriver;आयात java.text.NumberFormat;सार्वजनिक वर्ग MaxFromTable {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) 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");स्ट्रिंग अधिकतम;डबल एम = 0, आर = 0;//नहीं न। कॉलम केसूची  col = wd.findElements (By.xpath (".//* [@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("स्तंभों की कुल संख्या है: + col.size ());//No.of पंक्तियाँसूची  पंक्तियों = wd.findElements (By.xpath (".//* [@id='leftcontainer'iding/table/tbody/tr/td [1]")); System.out.println ("पंक्तियों की कुल संख्या है: + row.size ()); for (int i = 1; i  r) {r = m; }} System.out.println ("अधिकतम वर्तमान मूल्य है: + r); }}  

कोड स्पष्टीकरण:

  • क्रोम ड्राइवर का उपयोग करके हम वेब टेबल का पता लगाते हैं और XPath का उपयोग करके कुल पंक्ति प्राप्त करते हैं ".//* @@id='leftcontainer'iding/table/tbody/tr/td [1]"
  • लूप का उपयोग करते हुए, हम कुल पंक्तियों की संख्या के माध्यम से पुनरावृति करते हैं और एक-एक करके मूल्यों को प्राप्त करते हैं। अगली पंक्ति प्राप्त करने के लिए हम XPath में (i + 1) का उपयोग करते हैं
  • हम नए मूल्य के साथ पुराने मूल्य की तुलना करते हैं और अधिकतम मूल्य लूप के अंत में मुद्रित किया जाता है

उत्पादन

उदाहरण: डायनेमिक टेबल के सभी मान प्राप्त करें

निम्नलिखित तालिका पर विचार करें http://demo.guru99.com/test/table.html

प्रत्येक पंक्ति के लिए स्तंभों की संख्या भिन्न होती है।

यहाँ पंक्ति संख्या 1, 2 और 4 में 3 सेल हैं, और पंक्ति संख्या 3 में 2 सेल हैं, और पंक्ति संख्या 5 में 1 सेल है।

हमें सभी कोशिकाओं के मान प्राप्त करने की आवश्यकता है

यहाँ कोड है:

आयात java.text.ParseException;आयात java.util.ist;आयात org.openqa.selenium.By;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.WebElement;आयात java.util.concurrent.TimeUnit;आयात org.openqa.selenium.chrome.ChromeDriver;सार्वजनिक वर्ग NofRowsColmns {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) ParseException {फेंकता हैWebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = new ChromeDriver ();wd.manage ()। टाइमआउट ()। निहितार्थ (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// तालिका का पता लगाने के लिए।WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// तालिका की पंक्तियों का पता लगाने के लिए।सूची  row_table = mytable.findElements (By.tagName ("tr"));// तालिका में पंक्तियों की संख्या की गणना करने के लिए।int row_count = row_table.size ();// लूप तालिका की अंतिम पंक्ति तक निष्पादित होगा।के लिए (int पंक्ति = 0; पंक्ति  Columns_row = row_table.get (पंक्ति) .findElements (By.tagName ("td"));// स्तंभों (कोशिकाओं) की संख्या की गणना करने के लिए। उस विशिष्ट पंक्ति में।int column_count = Columns_row.size ();System.out.println ("रो में कोशिकाओं की संख्या" + पंक्ति + "" + column_count) हैं;// लूप उस विशिष्ट पंक्ति के अंतिम सेल तक निष्पादित करेगा।(int कॉलम = 0; कॉलम <कॉलम_काउंट; कॉलम ++) {के लिए// उस विशिष्ट सेल से पाठ को पुनः प्राप्त करने के लिए।स्ट्रिंग celtext = Columns_row.get (column) .getText ();System.out.println ("पंक्ति संख्या का सेल मान" + पंक्ति + "और स्तंभ संख्या" + स्तंभ + "है" + celtext);}System.out.println ("-------------------------------------------" ------- ");}}}

कोड स्पष्टीकरण:

  • row_count कुल पंक्तियों की संख्या देता है
  • प्रत्येक पंक्ति के लिए हमें row_table.get (पंक्ति) .findElements (By.tagName ("td")) का उपयोग करके कॉलम की कुल संख्या मिलती है;
  • हम प्रत्येक कॉलम और प्रत्येक पंक्ति के माध्यम से पुनरावृति करते हैं और मूल्यों को प्राप्त करते हैं।

आउटपुट :

सारांश

  • By.xpath () का उपयोग आमतौर पर तालिका तत्वों तक पहुंचने के लिए किया जाता है।
  • सेलेनियम में स्थिर वेब टेबल प्रकृति में सुसंगत हैं। यानी उनके पास सेल डेटा के साथ-साथ निश्चित संख्या में पंक्तियाँ हैं।
  • डायनामिक वेब टेबल असंगत हैं अर्थात उनमें पंक्तियों और कोशिकाओं के डेटा की निश्चित संख्या नहीं है।
  • सेलेनियम वेब ड्राइवर का उपयोग करके, हम गतिशील वेब तालिकाओं को आसानी से संभाल सकते हैं।
  • सेलेनियम वेबड्राइवर हमें उनके एक्स-पथ द्वारा गतिशील वेब तालिकाओं का उपयोग करने की अनुमति देता है

लेख का योगदान कंचन कुलकर्णी ने दिया है।