2010-08-17 12 views
14

watir-webdriver का उपयोग करके प्रतीक्षा करें, मैं एक लिंक पर क्लिक करने के बाद पेज को लोड करने का इंतजार कैसे करूं?वॉटर-वेबड्राइवर पेज लोड

फिलहाल मैं कर रहा हूँ:

sleep n 

लेकिन जैसे पेज प्रतिक्रिया इतना भिन्न होता है यह आदर्श नहीं है।

क्या यह जांचने का कोई तरीका है कि पृष्ठ तैयार है या पृष्ठ में कोई निश्चित तत्व है या नहीं। मैं सामान्य वॉटर रत्न में समझता हूं Watir::Waiter.wait_until या कुछ समान है, लेकिन मैं इसे वेबड्राइवर संस्करण में नहीं देख सकता।

+2

क्या आप पृष्ठ पूरी तरह से लोड होने के बाद तक कुछ इंतजार करने की कोशिश कर रहे हैं? मैंने सोचा कि मानक व्यवहार था ... – NinjaCat

+0

असल में आप सही हैं। हालांकि मुझे सोने का कारण यह है क्योंकि मेरे पास पृष्ठ सामग्री को अद्यतन करने वाला कुछ AJAX है। मैं प्रतिक्रिया तब तक इंतजार करना चाहता हूं जब तक प्रतिक्रिया सफल न हो। – sfusion

उत्तर

13

अगर वे सबसे अच्छा तरीका हो मैं नहीं जानता, लेकिन यह कैसे मैं स्पष्ट करने के लिए div को अद्यतन करने के लिए इंतज़ार कर के लिए इस से निपटने कर रहा हूँ है:

while browser.div(:id=>"updating_div").visible? do sleep 1 end

इस तरह मैं के लिए इंतज़ार कर संभाल है प्रदर्शित करने के लिए कुछ:

until browser.div(:id=>"some_div").exists? do sleep 1 end

+0

ठंडा यह फ़ायरफ़ॉक्स में पूरी तरह से काम करता है, क्रोम में इतना अच्छा नहीं है। मैं साथ गया: browser.div (: foo => 'bar') तक 1 तक सो गया है। – sfusion

+6

उपर्युक्त विधि की अनुशंसा नहीं की जाती है क्योंकि यह कभी भी आपकी स्क्रिप्ट (जावास्क्रिप्ट त्रुटि, कोड परिवर्तन इत्यादि) को वापस नहीं ले सकती है और लॉक नहीं कर सकती है। वॉटर :: Waiter.wait_until (15) {browser.div (: id => "updating_div) .visible?} – JEH

+0

क्षमा करें, लेकिन यह मेरे लिए काम नहीं करता !! – whizcreed

0

आप wait_until उपयोग कर सकते हैं ....

या

waituntilExists तरीकों

7

आज की रिहाई एक वैकल्पिक कहते हैं की आवश्यकता है कि तत्वों के लिए इंतजार कर के लिए कुछ सहायकों में लाता है। ये वाटिर 1.6 में उपलब्ध नहीं हैं (फिलहाल), इसलिए ध्यान रखें कि यदि आप दोनों पुस्तकालयों को एक तरफ इस्तेमाल करते हैं।

चेक Watir-webdriver में AJAX and waiting for elements पर पेज विकी

1

browser.wait_until विधि का इस्तेमाल किया जा सकता है इसकी और अधिक उपयोगी है कि तुम क्या में () रूप browser.wait_until(browser.text.include("some text"))

0

मैं तुम्हारे साथ एक ही समस्याओं से मिलने के लिए प्रतीक्षा करने को परिभाषित कर सकते , और मैं wait_until_present विधि और until browser.div(:id=>"some_div").exists? do sleep 1 end चाल @marc द्वारा povided में कंघी करके इसे ठीक करने का प्रयास करें:

some_div = browser.div(:id => 'some_div') 

begin 

    Watir::Wait.until 
    some_div.visible? 
    end 

rescue Watir::Wait::TimeoutError 

    until some_div.visible? 
    sleep 1 
    end 
end 

और देखा जा अपनी खुद की है कि यह जिम्मेदारी सुनिश्चित करें कि div(:id => "some_div") मौजूद

1

सबसे अच्छा सारांश यहाँ पाया जाता है ऐसा करने के लिए: http://watirwebdriver.com/waiting/

यहाँ

यह संक्षेप में है:

require 'watir-webdriver' 
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo' 
b.select_list(:id => 'entry_1').wait_until_present 
b.text_field(:id => 'entry_0').when_present.set 'your name' 
b.button(:value => 'Submit').click 
b.button(:value => 'Submit').wait_while_present 
Watir::Wait.until { b.text.include? 'Thank you' } 
0

इस तरह मैं में AJAX के लिए प्रतीक्षा मेरी परियोजना ...

ajax_loader = $b.element(:xpath => "//*[@id='spinner-modal-transparent' and @aria-hidden='true']/div/div/div/div/img[@alt='Ajax transparent loader']") 

if ajax_loader.exists? 
    ajax_loader.wait_while_present(timeout=350) 
else 
    puts "The AJAX loader was not present." 
end 
संबंधित मुद्दे