2012-10-22 21 views
9

मैं वेबपृष्ठों का एक स्क्रीनशॉट लेने के लिए सेलेनियम वेबड्राइवर का उपयोग कर रहा हूं। यह बहुत अच्छा चलाता है। हालांकि, जब तक मैं अपने स्थानीय ड्राइव में स्क्रीनशॉट दिखाता हूं तब तक ग्रहण में भागने के समय से 7-10 सेकेंड होता है। लगता है कि अधिकांश विलंबता फ़ायरफ़ॉक्स लॉन्च कर रही है।सेलेनियम वेबड्राइवर काम करता है लेकिन धीमा (जावा)

कोड:

WebDriver driver = new FirefoxDriver(); 
driver.get("http://www.cnn.com"); 
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
FileUtils.copyFile(scrFile, new File("c:\\test\\screenshot.png")); 

मैं इस प्रक्रिया में तेजी लाने कर सकते हैं? क्या कोई तरीका है कि मैं एक नया खोलने पर सहेजने के लिए पहले से खोले गए फ़ायरफ़ॉक्स ब्राउज़र का उपयोग कर सकता हूं? क्या यह कोड किसी भी तरह भारी है?

विवरण: ग्रहण का उपयोग कर सेंटोस बॉक्स और विन 7 बॉक्स पर प्रयास किया गया। myspeedtest.net 22 एमबीपीएस नीचे और 1 एमबीपीएस ऊपर दिखाता है।

उत्तर

10

आप जो पूछ रहे हैं (WebDriver को चल रहे ब्राउज़र से जोड़ने के लिए) almost 3 years के लिए अब एक मुद्दा रहा है। आज तक, यह सुविधा अभी भी नहीं जोड़ा गया है। जहां तक ​​मुझे पता है, फ़ायरफ़ॉक्स को किसी भी तेज़ी से लोड करने का कोई तरीका नहीं है। हालांकि आप कुछ अन्य चाल का प्रयास कर सकते हैं।

fp.setPreference("webdriver.load.strategy", "unstable") 

this page से चेतावनी का हवाला देते हुए: .Get बुला या .click के बाद

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

आप loading with a profile भी कोशिश कर सकते हैं और देख सकते हैं कि यह बिल्कुल मदद करता है या नहीं।

+0

वाह। निराशाजनक। माइक ऊपर सिर के लिए धन्यवाद। – Chris

5

बातों से मैं कहीं और सीखा -

  1. शून्य
  2. एप्लिकेशन को समय समाप्ति आपके ब्राउज़र/plugins के लिए
  3. अपने आईआईएस (या समतुल्य) सेट करें स्वत: अपडेट बंद करें एक आधार के उपयोग के लिए सेलेनियम स्थिरता बनाएं अपने परीक्षण में
  4. सेलेनियम के नवीनतम संस्करण में अद्यतन
  5. गर्म अप आपकी ऐप्लिकेशन पहले उसका परीक्षण
  6. श्री के लिए ओआरटी परीक्षण
  7. कुकीज़ को पूर्व-पॉप्युलेट करें।

संदर्भ:

https://sqa.stackexchange.com/questions/1988/selenium-reuse-existing-browser-session-instead-of-opening-new-windows

http://www.codeweavers.net/6-ways-to-speed-up-selenium-tests/

http://sauceio.com/index.php/2011/02/speed-up-your-selenium-tests/

आशा इस मदद करता है!

+2

मैं छः तरीकों के लेख का लेखक हूं - खुशी है कि आपको यह उपयोगी लगता है। यहां जो कुछ है, उसे प्रतिबिंबित करने के लिए, कुंजी आपके ऐप्स को गर्म रखती है, अपने सर्वर को टाइमआउट न दें और सुनिश्चित करें कि परीक्षण चलाने के दौरान कुछ भी अपडेट करने का प्रयास नहीं करेगा। – Finglas

+1

लेख प्यार किया !!! :) –

1

मुझे एहसास है कि इस प्रश्न का उत्तर पहले ही दिया जा चुका है, लेकिन मुझे उम्मीद है कि यह किसी भी समस्या से किसी को भी मदद करेगा।

यदि आपको बस इतना करना है कि स्क्रीनशॉट लें। मैं Awesomium.NET का उपयोग करने की सलाह देते हैं। http://awesomium.com/

जावा के बजाए सी # में ऐसा करना एक बड़ी कठिनाई नहीं होनी चाहिए क्योंकि उनके पास समान वाक्यविन्यास है। यदि आप लिनक्स पर अपना एप्लिकेशन चलाने के लिए चाहते हैं तो यह सी ++ का भी समर्थन करता है। मुझे लगता है कि यह WebDriver से काफी तेज होगा।

उपयोग इस अगर आप सी का चयन ++: http://labs.awesomium.com/capturing-web-pages-with-c/

सी # नेट के लिए: http://awesomium.com/docs/1_7_rc3/sharp_api/

+0

मार्व संकलन पर क्लिक करने और आपके जेनरेट किए गए स्क्रीनशॉट प्राप्त करने के लिए सामान्य रूप से आपको कितना समय लगता है? – Chris

+0

इसमें एक मृत लिंक है –

2

This thread एक संभावित व्याख्या को दर्शाता है।

संक्षेप में, सेलेनियम सभी नेटवर्क कार्ड के माध्यम से लूप करता है और एक विधि (getHostName) को कॉल करता है जो वर्चुअल नेटवर्क कार्ड के लिए लंबा समय लेता है। उन्हें अक्षम करने से थ्रेड में ओपी की समस्या हल हो गई।

(मेरे अपने मामले में, मुझे उनमें से किसी को अक्षम करें और प्रत्येक परीक्षा मामले की शुरुआत में इंतजार करना करने में असमर्थ हूँ ...)

+0

बीमार इसे जांचें, हमें अपडेट करने के लिए धन्यवाद ~! – Chris

0

मेरे लिए यह IEDriverServer के 64 बिट संस्करण के साथ काम किया, मैं जोड़ा संपत्ति के साथ विन्डोफोकस की आवश्यकता होती है: "सत्य"।

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer(); 
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true); 

capabilities.setCapability("requireWindowFocus", true); 
WebDriver driver = new InternetExplorerDriver(capabilities);