selenium-webdriver
वेब तत्वों का पता लगाना
खोज…
वाक्य - विन्यास
- अलंकृत (द्वारा परम)
टिप्पणियों
आइटम लोकेटर के उपयोग और के माध्यम से सेलेनियम में पाए जाते हैं By
वर्ग। सेलेनियम के साथ एक मजबूत स्वचालन परियोजना बनाने के लिए, किसी को वेब तत्वों के लिए स्मार्ट तरीके से लोकेटर का उपयोग करना चाहिए। लोकेटरों को वर्णनात्मक, अद्वितीय और बदलने की संभावना नहीं होनी चाहिए ताकि आपको उदाहरण के लिए परीक्षणों में झूठी सकारात्मकता न मिले। प्राथमिकता का उपयोग करना है:
- आईडी - चूंकि यह अद्वितीय है और आपको मनचाहा तत्व मिलेगा।
- वर्ग का नाम - यह वर्णनात्मक है और किसी दिए गए संदर्भ में अद्वितीय हो सकता है।
- CSS ( xpath से बेहतर प्रदर्शन ) - अधिक जटिल चयनकर्ताओं के लिए।
- XPATH - जहाँ CSS का उपयोग नहीं किया जा सकता है ( XPATH Axis ), जैसे
div::parent
।
बाकी लोकेटर परिवर्तन या प्रतिपादन के लिए प्रवण हैं, और पूर्ववर्ती से बचा जाना चाहिए।
अंगूठे का नियम: यदि आपका कोड किसी विशेष तत्व का पता नहीं लगा सकता है, तो एक कारण यह हो सकता है कि आपके कोड ने सभी DOM तत्वों को डाउनलोड करने के लिए इंतजार नहीं किया है। उक्त तत्व की खोज करने से पहले अपने कार्यक्रम को थोड़े समय के लिए "प्रतीक्षा" करने का प्रयास करने पर विचार करें (3-5 सेकंड और फिर धीरे-धीरे आवश्यकतानुसार बढ़ें)। इस प्रश्न से लिया गया पायथन में एक उदाहरण है:
from selenium import webdriver
import time
browser = webdriver.Firefox()
browser.get("https://app.website.com")
reports_element = browser.find_element_by_xpath("//button[contains(text(), 'Reports')]")
# Element not found! Try giving time for the browser to download all DOM elements:
time.sleep(10)
reports_element = browser.find_element_by_xpath("//button[contains(text(), 'Reports')]")
# This returns correct value!
WebDriver का उपयोग करके पेज एलिमेंट्स का पता लगाना
एक वेबपेज में WebElements के साथ बातचीत करने के लिए, पहले हमें तत्व के स्थान को पहचानना होगा।
द्वारा कीवर्ड सेलेनियम में उपलब्ध है।
आप तत्वों का पता लगा सकते हैं।
- आईडी द्वारा
- वर्ग नाम तक
- द्वारा टैगनाम
- 'नाम से
- लिंक पाठ द्वारा
- आंशिक लिंक पाठ द्वारा
- CSS चयनकर्ता द्वारा
- XPath द्वारा
- जावास्क्रिप्ट का उपयोग करना
नीचे दिए गए स्क्रिप्ट उदाहरण पर विचार करें
<form name="loginForm">
Login Username: <input id="username" name="login" type="text" />
Password: <input id="password" name="password" type="password" />
<input name="login" type="submit" value="Login" />
उपर्युक्त कोड में आईडी का उपयोग करके उपयोगकर्ता नाम और पासवर्ड सेट किया गया है। अब आप id वाले तत्वों की पहचान करने जा रहे हैं।
driver.findElement(By.id(username));
driver.findElement(By.id(password));
जैसा कि सेलेनियम 7 विभिन्न भाषाओं का समर्थन करता है, यह दस्तावेज़ आपको सभी भाषाओं में तत्वों का पता लगाने का एक विचार देता है।
आईडी द्वारा
आईडी का उपयोग करने वाले तत्व को खोजने का उदाहरण:
<div id="coolestWidgetEvah">...</div>
Java - WebElement element = driver.findElement(By.id("coolestWidgetEvah"));
C# - IWebElement element = driver.FindElement(By.Id("coolestWidgetEvah"));
Python - element = driver.find_element_by_id("coolestWidgetEvah")
Ruby - element = driver.find_element(:id, "coolestWidgetEvah")
JavaScript/Protractor - var elm = element(by.id("coolestWidgetEvah"));
वर्ग के नाम से
क्लास नाम का उपयोग करने वाले तत्व को खोजने का उदाहरण:
<div class="cheese"><span>Cheddar</span></div>
Java - WebElement element = driver.findElement(By.className("cheese"));
C# - IWebElement element = driver.FindElement(By.ClassName("cheese"));
Python - element = driver.find_element_by_class_name("cheese")
Ruby - cheeses = driver.find_elements(:class, "cheese")
JavaScript/Protractor - var elm = element(by.className("cheese"));
टैग नाम से
टैग नाम का उपयोग करके एक तत्व को खोजने का उदाहरण:
<iframe src="..."></iframe>
Java - WebElement element = driver.findElement(By.tagName("iframe"));
C# - IWebElement element = driver.FindElement(By.TagName("iframe"));
Python - element = driver.find_element_by_tag_name("iframe")
Ruby - frame = driver.find_element(:tag_name, "iframe")
JavaScript/Protractor - var elm = element(by.tagName("iframe"));
नाम से
नाम का उपयोग करने वाले तत्व को खोजने का उदाहरण:
<input name="cheese" type="text"/>
Java - WebElement element = driver.findElement(By.name("cheese"));
C# - IWebElement element = driver.FindElement(By.Name("cheese"));
Python - element = driver.find_element_by_name("cheese")
Ruby - cheese = driver.find_element(:name, "cheese")
JavaScript/Protractor - var elm = element(by.name("cheese"));
लिंक पाठ द्वारा
लिंक पाठ का उपयोग करके एक तत्व को खोजने का उदाहरण:
<a href="http://www.google.com/search?q=cheese">cheese</a>>
Java - WebElement element = driver.findElement(By.linkText("cheese"));
C# - IWebElement element = driver.FindElement(By.LinkText("cheese"));
Python - element = driver.find_element_by_link_text("cheese")
Ruby - cheese = driver.find_element(:link, "cheese")
JavaScript/Protractor - var elm = element(by.linkText("cheese"));
आंशिक लिंक पाठ द्वारा
आंशिक लिंक पाठ का उपयोग करके एक तत्व को खोजने का उदाहरण:
<a href="http://www.google.com/search?q=cheese">search for cheese</a>>
Java - WebElement element = driver.findElement(By.partialLinkText("cheese"));
C# - IWebElement element = driver.FindElement(By.PartialLinkText("cheese"));
Python - element = driver.find_element_by_partial_link_text("cheese")
Ruby - cheese = driver.find_element(:partial_link_text, "cheese")
JavaScript/Protractor - var elm = element(by.partialLinkText("cheese"));
CSS चयनकर्ताओं द्वारा
CSS चयनकर्ताओं का उपयोग करके एक तत्व को खोजने का उदाहरण:
<div id="food" class="dairy">milk</span>
Java - WebElement element = driver.findElement(By.cssSelector("#food.dairy")); //# is used to indicate id and . is used for classname.
C# - IWebElement element = driver.FindElement(By.CssSelector("#food.dairy"));
Python - element = driver.find_element_by_css_selector("#food.dairy")
Ruby - cheese = driver.find_element(:css, "#food span.dairy.aged")
JavaScript/Protractor - var elm = element(by.css("#food.dairy"));
यहाँ CSS चयनकर्ता बनाने के बारे में एक लेख दिया गया है: http://www.w3schools.com/cssref/css_selectors.asp
XPath द्वारा
XPath का उपयोग करके एक तत्व को खोजने का उदाहरण:
<input type="text" name="example" />
Java - WebElement element = driver.findElement(By.xpath("//input"));
C# - IWebElement element = driver.FindElement(By.XPath("//input"));
Python - element = driver.find_element_by_xpath("//input")
Ruby - inputs = driver.find_elements(:xpath, "//input")
JavaScript/Protractor - var elm = element(by.xpath("//input"));
यहाँ XPath के बारे में एक लेख दिया गया है: http://www.w3schools.com/xsl/xpath_intro.asp
जावास्क्रिप्ट का उपयोग करना
आप एक तत्व को खोजने के लिए मनमाने ढंग से जावास्क्रिप्ट निष्पादित कर सकते हैं और जब तक आप एक DOM तत्व वापस करते हैं, यह स्वचालित रूप से एक WebElement ऑब्जेक्ट में बदल जाएगा।
उस पृष्ठ पर सरल उदाहरण, जिसमें jQuery लोड है:
Java - WebElement element = (WebElement)
((JavascriptExecutor)driver).executeScript("return $('.cheese')[0]");
C# - IWebElement element = (IWebElement)
((IJavaScriptExecutor)driver).ExecuteScript("return $('.cheese')[0]");
Python - element = driver.execute_script("return $('.cheese')[0]");
Ruby - element = driver.execute_script("return $('.cheese')[0]")
JavaScript/Protractor -
कृपया ध्यान दें: यह विधि काम नहीं करेगी यदि आपका विशेष WebDriver जावास्क्रिप्ट, जैसे कि SimpleBrowser का समर्थन नहीं करता है।
कई मानदंडों द्वारा चयन करना [C #]
साथ में चयनकर्ताओं का उपयोग करना भी संभव है। यह OpenQA.Selenium.Support.PageObjects.ByChained
ऑब्जेक्ट का उपयोग करके किया जाता है:
element = driver.FindElement(new ByChained(By.TagName("input"), By.ClassName("class"));
की कोई भी संख्या By
रों श्रृंखलित जा सकता है और एक और प्रकार चयन (यानी सभी के रूप में उपयोग किया जाता है By
रों मिलान किया जाता है)
पृष्ठ लोड होने से पहले तत्वों का चयन करना
driver.Navigate().GoToUrl(url);
बुलाते driver.Navigate().GoToUrl(url);
जब तक पृष्ठ पूरी तरह से लोड नहीं हो जाता, तब तक कोड निष्पादन बंद हो जाता है। जब आप केवल डेटा निकालना चाहते हैं तो यह कभी-कभी अनावश्यक होता है।
नोट: नीचे दिए गए कोड के नमूने को हैक माना जा सकता है। ऐसा करने का कोई "आधिकारिक" तरीका नहीं है।
एक नया सूत्र बनाएँ
वेबपृष्ठ लोड करने के लिए एक थ्रेड बनाएं और लॉन्च करें , फिर प्रतीक्षा का उपयोग करें ।
सी#
using (var driver = new ChromeDriver())
{
new Thread(() =>
{
driver.Navigate().GoToUrl("http://stackoverflow.com");
}).Start();
new WebDriverWait(driver, TimeSpan.FromSeconds(10))
.Until(ExpectedConditions.ElementIsVisible(By.XPath("//div[@class='summary']/h3/a")));
}
टाइमआउट का उपयोग करें
एक WebDriverTimeout का उपयोग करके, आप एक पृष्ठ लोड कर सकते हैं, और एक निश्चित अवधि के बाद, यह एक अपवाद फेंक देगा, जिससे पृष्ठ लोड होना बंद हो जाएगा। कैच ब्लॉक में, आप प्रतीक्षा का उपयोग कर सकते हैं।
सी#
using (var driver = new ChromeDriver())
{
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(5));
try
{
driver.Navigate().GoToUrl("http://stackoverflow.com");
}
catch (WebDriverTimeoutException)
{
new WebDriverWait(driver, TimeSpan.FromSeconds(10))
.Until(ExpectedConditions.ElementIsVisible
(By.XPath("//div[@class='summary']/h3/a")));
}
}
समस्या : जब आप बहुत कम समय के लिए समय निर्धारित करते हैं, तो पृष्ठ आपके वांछित तत्व की परवाह किए बिना लोड करना बंद कर देगा। जब आप बहुत अधिक समय के लिए समय निर्धारित करते हैं, तो आप प्रदर्शन लाभ को नकारने जा रहे हैं।