selenium
सेलेनियम में प्रतीक्षा कर रहा है
खोज…
परिचय
नए सेलेनियम उपयोगकर्ताओं के लिए सबसे आम ठोकर ब्लॉकों में से एक पेज पूरी तरह से लोड होने तक इंतजार कर रहा है। मानव उपयोगकर्ता आसानी से बता सकते हैं कि क्या कोई पृष्ठ पूरी तरह से लोड है या यदि वह अभी भी लोड हो रहा है। हालांकि, सेलेनियम समय की एक निर्धारित राशि की प्रतीक्षा करता है। इसलिए, एक पृष्ठ में तत्वों की प्रतीक्षा करने का एक अच्छा तरीका होना अक्सर सुविधाजनक होता है। हालांकि लूप और स्लीप () फ़ंक्शन के साथ ऐसा करना संभव है, पहले सेलेनियम में निर्मित बहुत क्लीनर तरीके हैं।
पाइथन में स्पष्ट प्रतीक्षा करें
जब ब्राउज़र एक गतिशील पृष्ठ (सबसे आम तौर पर AJAX आधारित वेब अनुप्रयोग) पर नेविगेट करता है, तो पृष्ठ पर मौजूद तत्वों को लोड होने में अलग-अलग समय लग सकता है, और इसके अलावा: कुछ तत्व केवल कुछ उपयोगकर्ता कार्यों के जवाब में लोड होंगे। ऐसे मामलों में किसी तत्व की प्रत्यक्ष पुनर्प्राप्ति विफल हो सकती है:
# Don't do this: may fail on dynamic page with ElementNotVisibleException
element = driver.find_element_by_name('q')
तत्वों को प्राप्त करने से पहले प्रतीक्षा को पेश करना सबसे स्पष्ट समाधान है:
# Don't do this: inefficient solution for ElementNotVisibleException
time.sleep(5) # delays for 5 seconds
element = driver.find_element_by_name('q')
लेकिन ऐसा समाधान अक्षम है, क्योंकि यह परीक्षण को हमेशा 5 सेकंड तक इंतजार करने का कारण बनता है, तब भी जब अधिकांश मामलों में तत्व 1 सेकंड के बाद दिखाई देता है (और केवल कभी-कभी 5 सेकंड तक की आवश्यकता होती है)। यदि यह एक जगह है, तो यह बहुत नहीं दिखता है, लेकिन आमतौर पर प्रत्येक परीक्षण कई तत्वों से संबंधित होता है, और कई परीक्षण होते हैं, जो समग्र परीक्षण अवधि तक जोड़ता है।
एक बेहतर समाधान यह है कि तत्व 5 सेकंड तक दिखाई देने के लिए प्रतीक्षा करें, लेकिन तत्व मिलते ही प्रतीक्षा से वापस लौटें। WebDriverWait
आपको बस ऐसा करने की अनुमति देता है।
निम्न उदाहरण www.google.com पर नेविगेट करता है, खोज बार को लोड करने के लिए (5 सेकंड तक) प्रतीक्षा करता है, और फिर "सेलेनियम" की खोज करता है।
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# Create a new chromedriver instance
driver = webdriver.Chrome()
# Go to www.google.com
driver.get("https://www.google.com")
try:
# Wait as long as required, or maximum of 5 sec for element to appear
# If successful, retrieves the element
element = WebDriverWait(driver,5).until(
EC.presence_of_element_located((By.NAME, "q")))
# Type "selenium"
element.send_keys("selenium")
#Type Enter
element.send_keys(Keys.ENTER)
except TimeoutException:
print("Failed to load search bar at www.google.com")
finally:
driver.quit()
सेलेनियम के साथ जावा में प्रतीक्षा करें
स्पष्ट प्रतीक्षा : कोड में आगे बढ़ने से पहले एक निश्चित स्थिति के लिए प्रतीक्षा करें।
WebDriver driver = new FirefoxDriver();
driver.get("http://google.com");
WebElement myElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("myElement")));
निहित प्रतीक्षा: किसी तत्व या तत्वों को खोजने का प्रयास करते समय एक निश्चित समय तक प्रतीक्षा करें यदि वे तुरंत उपलब्ध नहीं हैं।
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://google.com");
WebElement myElement = driver.findElement(By.id("myElement"));