2013-07-09 5 views
12

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

यहाँ अब तक कोशिश की गई है:
प्रयास - समस्या:

JSErrorCollector.jar - ठीक काम करता है, लेकिन एक Firefox एकमात्र समाधान है।

इंजेक्षन जे एस पेज स्रोत में - मैं पृष्ठ के स्रोत WebDriver का उपयोग कर कोड में window.onerror कोड इंजेक्शन, लेकिन किसी भी प्रारंभिक त्रुटियों को याद कर रहे हैं क्योंकि इंजेक्शन बहुत देर हो चुकी है।

BrowserMob - मैं HTTP प्रतिक्रिया रोकना और प्रतिक्रिया शरीर में window.onerror कोड इंजेक्षन करने की योजना बनाई सकता है, लेकिन लेखक अभी तक getBody() विधि लागू नहीं किया है, इसलिए केवल हेडर संशोधित किया जा सकता है कि मैं के बारे में पता कर रहा हूँ। शरीर सभी प्रतिक्रियाओं के लिए हमेशा शून्य है। (मैं फिर से एक वेबपेज जहाँ लेखक getBody() को लागू करने के बारे में बात पर था, लेकिन यह अभी तक नहीं हुई है और मैं इसे नहीं मिल सकता है)

फ़िडलर - जे एस सही ढंग से इंजेक्षन जाएगा, लेकिन फ़िडलर विंडोज है केवल इतना सफारी नहीं होगा काम।

अभिभावक/बाल खिड़कियां - मैं परीक्षण पृष्ठ की विंडो को संदर्भ खोलने और संग्रहीत करने के लिए जावास्क्रिप्ट का उपयोग करता हूं। window.onerror code पैरेंट विंडो में निहित है, इसलिए यह बाल विंडो में स्टार्टअप त्रुटियों को याद नहीं करेगा। मैं इसे कुछ भी काम करने के लिए नहीं मिल सकता लेकिन फ़ायरफ़ॉक्स और क्रोम कुछ हद तक। मैंने पहले ही here के बारे में एक प्रश्न पूछा है।

सेलेनियम आर सी - मैं इसे की कोशिश की है नहीं क्योंकि मेरे सभी परीक्षणों WebDriver उपयोग करें, लेकिन मैं जानता हूँ कि यह captureNetworkTraffic() की तरह विधि किसी तरह का है, लेकिन मुझे नहीं लगता कि यह WebDriver में इस्तेमाल किया जा सकता है।

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

ब्राउज़र कंसोल पढ़ें - मुझे सभी ब्राउज़रों में ऐसा करने का कोई तरीका नहीं मिला। क्रोम में मुझे कंसोल लॉग को फ़ाइल में सहेजने का एक तरीका मिला और फिर फ़ाइल को पढ़ा। जहां तक ​​मुझे मिला है।

मुझे ब्राउज़रमोब के समान समाधान चाहिए क्योंकि ऐसा लगता है कि यह एक क्रॉस ब्राउज़र समाधान होगा। क्या कोई अन्य प्रॉक्सी है जिसे परीक्षण में रखा जा सकता है और प्रतिक्रिया को रोक सकता है? यह उत्कृष्ट रहा होगा अगर getBody() विधि लागू की गई थी। मुझे माता-पिता/बाल समाधान भी पसंद है क्योंकि यह एक सरल, क्रॉस ब्राउज़र समाधान की तरह लगता है, लेकिन यह आईई (parent/child question again) के लिए काम नहीं कर रहा है।

किसी भी मदद के लिए धन्यवाद।

+1

जहाँ तक मुझे पता है, आपने वर्तमान में उपलब्ध सभी संभावित समाधान सूचीबद्ध किए हैं (जुलाई 2013, सेलेनियम 2.33.0)। [अधिक चर्चा के लिए आधिकारिक सेलेनियम बग देखें।] (Http://code.google.com/p/selenium/issues/detail?id=148) जब तक कोई आधिकारिक एपीआई नहीं है, तो आपको उन लोगों के मिश्रण का उपयोग करना होगा समाधान, या संभवतया आपको समर्थन करने के लिए आवश्यक प्रत्येक ब्राउज़र के लिए अपना स्वयं का ब्राउज़र एडन लिखें। –

+0

लिंक के लिए धन्यवाद। – Ryan

+2

आपको एहसास है कि ब्राउज़रमोब प्रॉक्सी [ओपन-सोर्स] है (https://github.com/lightbody/browsermob-proxy), है ना? गुम कार्यक्षमता को लागू करने और पुल अनुरोध सबमिट करने से आपको क्या रोक रहा है? – JimEvans

उत्तर

1

मुझे परीक्षण ढांचे द्वारा जावास्क्रिप्ट कोड त्रुटियों को सीधे पकड़ने के किसी भी तरीके से नहीं पता है। अगर मुझे लगता है, तो मैं PhantomJS का उपयोग करूंगा। या, शायद MITM Proxy जैसे कुछ काम करेंगे?

एक sidenote के रूप में, यदि आप एक अलग नोड के साथ सेलेनियम 2 ग्रिड हब चलाते हैं, तो आप इस तरह के नोड के जेवीएम में जावा विकल्प पास कर सकते हैं जो फिडलर के माध्यम से प्रॉक्सी को काम करने की अनुमति देगा। फिडलर पोर्ट 8888 पर (डिफ़ॉल्ट रूप से) सुनता है। इस विधि के साथ आप पैकेट देख सकते हैं।

:: batch script: Set JAVA_OPTS java options to JVM 
SET "JAVA_OPTS=-Dwebdriver.chrome.^ 
driver=%CHROMEDRIVER%" 
IF "%PROXY_TO_FIDDLER%"=="true" SET "JAVA_OPTS=%JAVA_OPTS% -DproxySet=true^ 
-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888" 

मैंने scripts you can use to start your grid and node here बनाया। ऐसा लगता है कि आप पोर्ट 8080 पर ब्राउज़रमोब प्रॉक्सी से बात करने के लिए इस विधि का उपयोग कर सकते हैं? मैंने कोशिश नहीं की है।

+0

मैं अभी पैकेट देखने के लिए फिडलर का उपयोग कर रहा हूं, लेकिन मेरे पास ग्रिड सेटअप नहीं है। मैं आपके कोड में देखूंगा। उत्तर/कोड के लिए धन्यवाद। – Ryan

+0

मुझे लगता है कि पेज स्रोत ग्रिड हब और नोड के बीच नहीं गुजरता है। नोड इंस्टेंस पर प्रत्येक वेब ब्राउज़र सत्र जो जावास्क्रिप्ट त्रुटि का सामना करता है, अपने स्वयं के सैंडबॉक्स में है। JQuery इंजेक्शन का उपयोग करने का आपका विचार मुझे ऐसा करने का एकमात्र तरीका लगता है लेकिन मुझे पता है कि आपने कहा था कि यह पर्याप्त जल्दी त्रुटियों को नहीं पकड़ता है। मैं थियोरिज़िंग कर रहा हूं, लेकिन शायद आप अपने पेज को आईफ्रेम रैपर टेस्ट पेज फ्रेम में लोड कर सकते हैं जो आपके पृष्ठ को लोड करने के लिए jquery और नियंत्रण/देखता है। उस स्थिति में फ्रेम में आने के लिए आपके टेस्ट ड्राइवर को स्विच करना होगा। – djangofan

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