2011-03-28 22 views
16

मैं वेबड्राइवर और फ़ायरफ़ॉक्स के साथ कई परीक्षण चला रहा हूं।फ़ायरफ़ॉक्स में पेज लोडिंग को प्रोग्रामेटिक रूप से कैसे रोकें?

मैं निम्न आदेश के साथ एक समस्या में चल रहा हूँ: इस आदेश के साथ

WebDriver.get(www.google.com);

, ऑनलोड घटना तक WebDriver ब्लॉक निकाल दिया जाता है। हालांकि यह आमतौर पर सेकंड ले सकता है, इसमें वेबसाइटों पर घंटों लग सकते हैं जो लोडिंग कभी खत्म नहीं करते हैं।

मैं जो करना चाहता हूं वह एक निश्चित टाइमआउट के बाद पृष्ठ को लोड करना बंद कर देता है, किसी भी तरह फ़ायरफ़ॉक्स के स्टॉप बटन को अनुकरण करता है।

जिसमें आदेश की वजह से: क्योंकि शायद,

var loadTimeout=setTimeout(\"window.stop();\", 10000); 

दुर्भाग्य से यह काम नहीं करता:

मैं पहली बार निम्नलिखित जे एस कोड हर बार है कि मैं एक पृष्ठ लोड हो रहा करने की कोशिश की पर अमल करने की कोशिश की स्क्रिप्ट लोड हो जाती हैं, स्टॉप() विधि उस दस्तावेज़ को रोक नहीं सकती है जिसमें यह 1

UPDA लोड करने से निहित है TE 1: मैंने कनेक्ट जोड़ने और टाइमआउट का अनुरोध करने के लिए SquidProxy का उपयोग करने का प्रयास किया, लेकिन समस्या बनी रही।

आज एक अजीब बात जो मैंने पाया वह यह है कि एक ऐसी वेबसाइट जो मेरी मशीन (एफएफ 3.6 - 4.0 और मैक ओएस 10.6.7) पर लोडिंग को कभी नहीं रोकती है, आमतौर पर अन्य ब्राउज़रों और/या कंप्यूटरों पर लोड होती है।

अद्यतन 2: फ़ायरफ़ॉक्स को छवियों को लोड न करने के बारे में बताकर समस्या को हल किया जा सकता है। उम्मीद है कि उसके बाद सबकुछ काम करेगा ...

मेरी इच्छा है कि इसका उपयोग करने के लिए वेबड्राइवर का बेहतर क्रोम ड्राइवर हो। फ़ायरफ़ॉक्स हर दिन मुझे निराशाजनक है!

अद्यतन 3: सेलेनियम 2.9 ने उन मामलों को संभालने के लिए एक नई सुविधा जोड़ा जहां ड्राइवर लटकता प्रतीत होता है। यह FirefoxProfile साथ इस प्रकार के रूप में इस्तेमाल किया जा सकता है:

FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("web"); 
firefoxProfile.setPreference("webdriver.load.strategy", "fast"); 

मैं पोस्ट करेंगे कि क्या यह काम करता है के बाद मैं इसे प्रयास करें।

अद्यतन 4: अंत में उपर्युक्त तरीकों में से कोई भी काम नहीं करता है। मैं उन धागे को "मारना" समाप्त करता हूं जो खत्म होने में लंबे समय तक ले रहे हैं। मैं Ghostdriver को आजमाने की योजना बना रहा हूं जो रिमोट वेबड्राइवर है जो फ़ैंटॉमजेएस को बैक-एंड के रूप में उपयोग करता है। फैंटॉमजेएस एक हेडलेस वेबकिट स्क्रिप्ट योग्य है, इसलिए मुझे उम्मीद है कि फ़ायरफ़ॉक्स जैसे वास्तविक ब्राउज़र की समस्याएं न हों। उन लोगों के लिए जो फ़ायरफ़ॉक्स (क्रॉलिंग उद्देश्यों) का उपयोग करने के लिए बाध्य नहीं हैं, मैं परिणाम

अपडेट 5 के साथ अपडेट करूँगा। अद्यतन के लिए समय। Ghostdriver 1.1 के बजाय 5 महीनों के लिए उपयोग करना फ़ायरफ़ॉक्स ड्राइवर मैं कह सकता हूं कि मैं अपने प्रदर्शन और स्थिरता से वास्तव में खुश हूं। मुझे कुछ ऐसे मामले मिले हैं जहां हमारे पास उचित व्यवहार नहीं है लेकिन सामान्य भूत-प्रेमी की तरह दिखता है। इसलिए यदि आपको मेरी तरह, क्रॉलिंग/वेब स्क्रैपिंग उद्देश्यों के लिए एक ब्राउज़र की आवश्यकता है, तो मैं आपको भूत-प्रेमी का उपयोग फ़ायरफ़ॉक्स और एक्सवीएफबी का उपयोग करने की सिफारिश करता हूं जो आपको कई सिरदर्द देगा ...

+0

यह आपके लिए काम किया था: तो फिर तुम जैसे एक Greasemonkey स्क्रिप्ट के लिए जा सकते हैं? – Nyx

+0

दुर्भाग्य से नहीं। मैं थ्रेडों को "मारने" को समाप्त करता हूं जो एक नॉन स्टॉप लोडिंग पेज प्राप्त करते हैं .. – ArisRe82

उत्तर

2

मैंने एक ही समस्या में भाग लिया है, और कोई नहीं है ऐसा लगता है कि सामान्य समाधान। हालांकि, उनके बग ट्रैकिंग सिस्टम में इसके बारे में एक बग है, जिसके लिए आप वोट देने के लिए 'स्टार' कर सकते हैं।, मूल रूप से, यह एक अलग थ्रेड जो आवश्यक समय के लिए इंतजार कर रहा है बनाता है, और फिर ब्राउज़र में दबाने से बच अनुकरण करने के लिए कोशिश करता है -

http://code.google.com/p/selenium/issues/detail?id=687

कि बग पर टिप्पणियों में से एक एक समाधान है जो आप के लिए काम कर सकते हैं है लेकिन इसके लिए ब्राउज़र विंडो को सबसे आगे की आवश्यकता होती है, जो एक समस्या हो सकती है।

http://code.google.com/p/selenium/issues/detail?id=687#c4

+0

हाँ .. मैंने पहले से ही यह भी कोशिश की है .. परीक्षणों के पैरालाइजेशन की वजह से कोई भाग्य नहीं है ... मुझे आश्चर्य है कि वेबड्राइवर या फ़ायरफ़ॉक्स से कोई व्यक्ति होगा इसके लिए कुछ करें .. – ArisRe82

0

एक अजीब बात यह है कि मैं आज पाया कि एक वेब साइट है कि मेरे मशीन पर लोड हो रहा है रोक कभी नहीं (FF3.6 - 4.0 और मैक ओएस 10.6.7) है, क्रोम में normaly लोड हो रहा है रोक है मेरी मशीन में और मेरे कुछ सहयोगी के मैक ओएस और विंडोज मशीनों में भी!

मुझे लगता है कि समस्या फ़ायरफ़ॉक्स कीड़े से निकटता से संबंधित है। विवरण के लिए this blog post देखें। शायद नवीनतम संस्करण में फ़ायरफ़ॉक्स का नवीनीकरण आपकी समस्या का समाधान करेगा। वैसे भी मैं सेलेनियम अपडेट देखना चाहता हूं जो "स्टॉप" बटन को अनुकरण करता है ...

1

मेरा समाधान इस वर्ग का उपयोग करना है: WebDriverBackedSelenium;

//When creating a new browser: 
WebDriver driver = _initBrowser(); //Just returns firefox WebDriver 
WebDriverBackedSelenium backedSelenuium = 
      new WebDriverBackedSelenium(driver,"about:blank");  

//This code has to be put where a TimeOut is detected 
//I use ExecutorService and Future<?> Object 

void onTimeOut() 
{ 
    backedSelenuium.runScript("window.stop();"); 
} 
+0

मैं वेबड्राइवर के साथ फंसना पसंद करता हूं, लेकिन धन्यवाद। – ArisRe82

+0

क्या आप इसके लिए एक रूबी संगत समाधान प्रदान कर सकते हैं? मैं इस क्षेत्र में फंस गया। – DoLoveSky

6

मैं कुछ चीजें करने में सक्षम था।

सबसे पहले, वेबड्राइवर के लिए टाइमआउट सेट करें। उदा।,

WebDriver wd; 
... initialize wd ... 
wd.manage().timeouts().pageLoadTimeout(5000, TimeUnit.MILLISECONDS); 

दूसरा, जब आप अपना प्राप्त करते हैं, तो उसे टाइमआउट अपवाद के चारों ओर लपेटें। (मैं सिर्फ अच्छा उपाय वहाँ एक UnhandledAlertException पकड़ गयी।) उदाहरण के लिए,

for (int i = 0; i < 10; i++) { 
    try { 
     wd.get(url); 
     break; 
    } catch (org.openqa.selenium.TimeoutException te) { 
     ((JavascriptExecutor)wd).executeScript("window.stop();"); 
    } catch (UnhandledAlertException uae) { 
     Alert alert = wd.switchTo().alert(); 
     alert.accept(); 
    } 
} 

यह मूलतः पृष्ठ लोड करने की कोशिश करता है, लेकिन अगर यह समय समाप्त, यह पृष्ठ जावास्क्रिप्ट के माध्यम से लोड हो रहा है को रोकने के लिए मजबूर करता है, तो निकलने की कोशिश करता पृष्ठ फिर से। यह आपके मामले में मदद नहीं कर सकता है, लेकिन यह निश्चित रूप से मेरी मदद करता है, खासकर जब वेबड्राइवर getCurrentUrl() कमांड करते समय, जो बहुत अधिक समय ले सकता है, एक चेतावनी है, और यूआरएल प्राप्त करने से पहले पृष्ठ को लोड करना बंद करने की आवश्यकता होती है।

+0

आपके उत्तर के लिए धन्यवाद। कानूनी लग रहा है। मैं इसे आज़माउंगा और आपको बता दूंगा। – ArisRe82

0

मूल रूप से मैंने अपने सेलेनियम हब से ब्राउज़र टाइमआउट को कम सेट किया, और फिर त्रुटि पकड़ ली। और फिर ब्राउज़र को लोड होने से रोकें, फिर परीक्षण जारी रखें।

webdriver.manage().timeouts().pageLoadTimeout(55000); 
 

 
function handleError(err){ 
 
      console.log(err.stack); 
 
     }; 
 

 

 
return webdriver.get(url).then(null,handleError).then(function() { 
 
      return webdriver.executeScript("return window.stop()"); 
 
     });

0

ठीक है, निम्नलिखित अवधारणा क्रोम पर मेरे साथ काम किया, एक ही कोशिश:

1) नेविगेट करें "about: blank" 2) प्राप्त तत्व "शरीर" 3) elemënt पर, बस कुंजी भेजें Ësc

-1

बस अगर किसी और के साथ हमेशा परेशान होने के साथ अटक जा सकता है, तो आपजैसे सरल ऐड-ऑन का उपयोग कर सकते हैंआसानी से नौकरी करने के लिए।

संपादित करें: जावास्क्रिप्ट समस्या होने पर यह समाधान काम नहीं करता है।

// ==UserScript== 
 
// @name  auto kill 
 
// @namespace default 
 
// @description auto kill 
 
// @include  * 
 
// @version  1 
 
// @grant  none 
 
// ==/UserScript== 
 

 
function sleep1() { 
 
    window.stop(); 
 
    setTimeout(sleep1, 1500); 
 
} 
 

 
setTimeout(sleep1, 5000);

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