प्रत्येक लोकेटर का कुछ महत्व है। यदि पेज में यूनिक एट्रिब्यूट वैल्यू हैं, तो हमें पहले उनका उपयोग करना चाहिए। हालांकि यदि कोई यूनिक एलिमेंट नहीं हैं, तो हमें CSS सेलेक्टर का उपयोग करना चाहिए क्योंकि यह गति के मामले में अधिक प्रभावी है।
CSS का एक दोष भी है कि हम चाइल्ड से पैरेंट नोड तक ट्रैवर्स नहीं कर सकते जिसका अर्थ है कि हम पीछे की ओर यात्रा नहीं कर सकते। लेकिन XPath यह सुविधा देता है। XPath Selenium में सबसे आम लोकेटर है और DOM एलिमेंट्स और एट्रिब्यूट्स के माध्यम से ट्रैवर्सल करके ऑब्जेक्ट की पहचान करता है।
XPath को दो तरीकों से दर्शाया जाता है अर्थात् '/' और '//'। एक फॉरवर्ड सिंगल स्लैश का अर्थ एब्सोल्यूट पथ है। यहां XPath DOM में पैरेंट से चाइल्ड तक सीधे ट्रैवर्स करता है। इस प्रकार एब्सोल्यूट XPath में हमें रूट नोड से टार्गेट तक यात्रा करनी होती है।
सिंटैक्स -
driver.findElement(By.xpath("/html/body/div/input")).एक डबल फॉरवर्ड '//' स्लैश का अर्थ रिलेटिव पथ है। यहां XPath DOM के हर कोने में मिलान करने वाले एलिमेंट को ढूंढता है। इसका कोई विशेष प्रारंभ बिंदु नहीं होता।
सिंटैक्स -
driver.findElement(By.xpath("//input[@name=’Tutorial’]")).रिलेटिव XPath का उपयोग करने की हमेशा सिफारिश की जाती है बजाय एब्सोल्यूट XPath के। एब्सोल्यूट XPath में, हमें रूट से वांछित एलिमेंट तक निर्दिष्ट करना होता है इसलिए यदि बीच में किसी एट्रिब्यूट और उसकी वैल्यू में परिवर्तन होता है, तो हमारा XPath अब सही नहीं रहेगा।
उदाहरण
import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import java.util.concurrent.TimeUnit; public class TextMatch { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); String url = " https://www.tutorialspoint.com/questions/index.php"; driver.get(url); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // xpath से एलिमेंट की पहचान driver.findElement(By.xpath("//input[@class=’gsc-input’]")).click(); driver.close(); } }