2015-07-13 4 views
5

मेरे पास एक ऐसा पृष्ठ है जो कभी-कभी एक मिनट में लोड हो जाता है। मान लें कि यह अपेक्षित व्यवहार है और बदल नहीं होगा। इन मामलों में, मुझे Net::ReadTimeout मिलता है।कैपिबारा अधिकतम स्वीकृत पृष्ठ लोड समय

ध्यान दें कि यह पिछले पृष्ठ पर एक बटन पर क्लिक करके किसी पृष्ठ पर नेविगेट करने के बाद है, न कि AJAX अनुरोध। इसलिए Capybara.using_wait_time मदद नहीं करता है। page.driver.browser.manage.timeouts के implicit_wait, script_timeout और page_load स्थापना

  • :

    मैं जैसे कट्टरपंथी चीजों के एक नंबर (जिनमें से कुछ मुझे पता था कि काम नहीं होगा) की कोशिश की है।

  • संपूर्ण ऑब्जेक्ट स्पेस के माध्यम से लूपिंग और सभी Selenium::WebDriver::Remote::Http::Default के timeout मान को सेट करना।
  • संपूर्ण ऑब्जेक्ट स्पेस के माध्यम से लूपिंग और सभी Net::HTTPread_timeout सेट करना।
  • page.driver.browser.send(:bridge).http.instance_variable_get(:@http).read_timeout=

कोई भी काम करने के लिए लग रहे हैं। यह बहुत छोटा होना चाहिए, फिर भी मुझे ऐसा करने का कोई तरीका नहीं मिला।

यदि आप एक वेबड्राइवर अज्ञेय समाधान के बारे में जानते हैं जो बहुत अच्छा होगा। यदि नहीं - मैं सेलेनियम का उपयोग कर रहा हूं।

+0

मेरी 2 सेंट लोड करने के लिए एक मिनट से अधिक ले जाएगा: स्वचालन है त्वरित प्रतिक्रिया के बारे में, यदि आपके ऐप को लोड करने के लिए एक मिनट से अधिक समय लगता है, तो पेज टाइमआउट बढ़ाने का जवाब नहीं है, अपने ऐप्स को लोड करने का समय कम करें, आपको उस पर ध्यान केंद्रित करना चाहिए ... – Bodao

+0

@ user3087106, मैं पूरी तरह से सहमत हूं। हालांकि, वर्तमान मामले में यह लागू नहीं है। मान लीजिए कि मैं किसी और के लाइव प्रोजेक्ट का परीक्षण कर रहा हूं और वे ऑपरेशन को अनुकूलित करने के लिए आवश्यक संसाधनों को निवेश करने के लिए तैयार नहीं हैं/इसे पृष्ठभूमि प्रक्रिया में या जो कुछ भी डालते हैं। – ndn

+0

क्या आपने Capybara.default_max_wait_time (डिफ़ॉल्ट 2 सेकंड है) को बढ़ाने की कोशिश की है, साथ ही किसी तत्व के लिए एक जोर देने के साथ जो केवल नए पृष्ठ पर उपलब्ध है? – Sam

उत्तर

11

सेलेनियम में कई अलग-अलग टाइमआउट सेटिंग्स हैं, जिनमें से कुछ रनटाइम पर बदला जा सकता है, अन्य जिन्हें चालक प्रारंभ होने पर सेट किया जाना है। आप सबसे अधिक संभावना Http :: डिफ़ॉल्ट टाइमआउट में चल रहे हैं जो 60 सेकंड तक डिफ़ॉल्ट है। आप http_client के रूप में सेलेनियम ड्राइवर में अपने स्वयं के उदाहरण से गुजर रहा

Capybara.register_driver :slow_selenium do |app| 
    client = Selenium::WebDriver::Remote::Http::Default.new 
    client.timeout = 120 
    Capybara::Selenium::Driver.new(app, http_client: client) 
end 

द्वारा इस ओवरराइड कर सकते हैं और उसके बाद का उपयोग करें: परीक्षण के लिए slow_selenium ड्राइवर जो पेज

+0

बस किसी के भविष्य के संदर्भ के लिए स्पष्टीकरण देने के लिए - आप 'ड्राइवर:: slow_selenium' टैग जोड़कर अपने कुछ चश्मे के लिए नए ड्राइवर का उपयोग करने के लिए कैपिबारा को बता सकते हैं। – ndn

संबंधित मुद्दे