2013-01-24 23 views
5

मैं कुछ इनपुटफील्ड में कुछ चाबियाँ भेज रहा हूं। जब इस तत्व से फोकस हटा दिया जाता है, तो एक AJAX अनुरोध सर्वर पर भेजा जाता है यदि मेरे द्वारा दर्ज किया गया मान मान्य है। यदि ऐसा है, तो कुछ भी नहीं होता है, अगर कोई त्रुटि संदेश नहीं होता है। इनमें से कुछ फ़ील्ड हैं।सेलेनियम अजाक्स इंतजार अगर अजाक्स कोई तत्व नहीं देता है?

जब मैं कहता हूँ:

driver.findElementById(firstId).sendKeys(firstValue); 
driver.findElementById(secondId).sendKeys(secondValue); 

दूसरा मान दूसरा तत्व के लिए भेजा जाना नहीं होगा क्योंकि वहाँ का मतलब समय में एक बहुत ही कम ajax अनुरोध किया जाएगा। लेकिन चूंकि मान ठीक है (पहले वैल्यू) यह किसी भी पाठ या कुछ और नहीं लाएगा।

मैं इस एजेक्स को समाप्त करने के लिए सेलेनियम कैसे कह सकता हूं? मैं Thread.sleep का उपयोग नहीं करना चाहता हूँ।

+1

आप सेलेनियम इम्प्लीट प्रतीक्षा और स्पष्ट प्रतीक्षा का उपयोग कर सकते हैं। – Manigandan

+0

@ मंजीगंदन अंतर्निहित प्रतीक्षा और प्रदर्शनी प्रतीक्षा क्या है? –

उत्तर

7

सेलेनियम AJAX लोडिंग की प्रतीक्षा नहीं करेगा। यह स्वचालित रूप से एक पेज लोडिंग के लिए इंतजार कर रहा है। AJAX प्रकार लोडिंग के लिए प्रतीक्षा करने के लिए आपको लागू और स्पष्ट प्रतीक्षा का उपयोग करना होगा।

आप इम्प्लीट प्रतीक्षा और स्पष्ट रूप से किसी विशेष वेब तत्व की प्रतीक्षा करने के लिए प्रतीक्षा कर सकते हैं जब तक कि यह पृष्ठ में दिखाई न दे। प्रतीक्षा अवधि जिसे आप परिभाषित कर सकते हैं और यह एप्लिकेशन पर निर्भर करता है।

स्पष्ट प्रतीक्षा:

एक स्पष्ट इंतजार कोड आप एक निश्चित शर्त कोड में आगे बढ़ने से पहले होने की प्रतीक्षा करने के लिए परिभाषित है। यदि प्राप्त की गई स्थिति यह प्रतीक्षा को समाप्त कर देगी और आगे के चरणों को आगे बढ़ाएगी।

कोड:

WebDriverWait wait = new WebDriverWait(driver,30); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(strEdit))); 

या

WebElement myDynamicElement = (new WebDriverWait(driver, 30)) 
.until(new ExpectedCondition<WebElement>(){ 
@Override 
public WebElement apply(WebDriver d) { 
return d.findElement(By.id("myDynamicElement")); 
}}); 

यह एक TimeoutException फेंकने से पहले 30 सेकंड तक इंतजार कर रहा है या अगर यह पाता है तत्व 0 में वापस आ जाएगी - 30 सेकंड। डिफ़ॉल्ट रूप से WebDriverWait प्रत्येक 500 मिलीसेकंड की अपेक्षित कंडिशन को सफलतापूर्वक लौटाए जाने तक कॉल करता है। एक सफल वापसी अपेक्षित कैंडीशन प्रकार के लिए है, बूलियन वापस अन्य सभी अपेक्षित कंडिशन प्रकारों के लिए सही वापसी मूल्य नहीं है।

आप अपेक्षित कैंडिशन क्लास का उपयोग कर सकते हैं क्योंकि आपको एप्लिकेशन की आवश्यकता है।

अंतर्निहित प्रतीक्षा:

एक अंतर्निहित इंतजार WebDriver बताने के लिए जब एक तत्व या तत्वों को खोजने के लिए है, तो वे तुरंत उपलब्ध नहीं हैं

कोड की कोशिश कर समय की एक निश्चित राशि के लिए डोम सर्वेक्षण करना है : ध्यान में रखने की

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

एक बात है कि एक बार निहित इंतजार सेट कर दिया जाता है - यह WebDriver obj के जीवन के लिए ही रहेगा ect उदाहरण

अधिक जानकारी के लिए इस लिंक http://seleniumhq.org/docs/04_webdriver_advanced.jsp

You can use these waits during your AJAX loading.

मुझे आशा है कि यह उपयोगी होगा का उपयोग करें।

+0

धन्यवाद। तो मुझे कुछ समय के लिए इंतजार करना है? मेरी स्थिति में AJAX बनें कोई तत्व दृश्यमान या अदृश्य नहीं बनाता .. –

+0

हां दाएं। यदि यह उत्तर आपकी समस्या का समाधान करता है तो इसे स्वीकार किया जाता है। – Manigandan

+0

यह वास्तव में नहीं है .. –