8

मैंने देखा है कि एक ग्रिड पर समानांतर में एकाधिक सेलेनियम फ़ायरफ़ॉक्स परीक्षण चलाते समय फोकस ईवेंट हैंडलिंग सही ढंग से काम नहीं कर रहा है। मैंने पुष्टि की है कि जब मेरे प्रत्येक परीक्षण व्यक्तिगत रूप से चलाया जाता है और ओएस का ध्यान दिया जाता है तो परीक्षण 100% समय बीतते हैं। मैंने क्रोम के साथ ग्रिड पर समानांतर परीक्षण भी चलाए हैं और इस मुद्दे को नहीं देखा है।सेलेनियम वेबड्राइवर परीक्षण के दौरान फ़ायरफ़ॉक्स के कई उदाहरण सही ढंग से ध्यान केंद्रित नहीं कर रहे हैं।

मुझे Google समूह पर निम्न धागा मिला है जो सुझाव देता है कि प्रत्येक ब्राउज़र को xvfb के एक अलग उदाहरण में लॉन्च करने का एक व्यवहार्य समाधान हो सकता है। https://groups.google.com/forum/?fromgroups#!topic/selenium-developers/1cAmsYCp2ho%5B1-25%5D

परीक्षण का हिस्सा असफल रहा है जो परियोजना में उपयोग की जाने वाली एक jquery date picker के कारण है। डेट पिकर फ़ोकस ईवेंट पर लॉन्च होता है और चूंकि कई सेलेनियम परीक्षण एक ही समय में निष्पादित होते हैं क्योंकि वेबड्राइवर परीक्षण .click() कमांड निष्पादित करता है लेकिन फ़ोकस दिनांक पिकर विजेट दिखाई देने के लिए पर्याप्त नहीं रहता है।

। फ़ोकस (फ़ंक्शन() {$ input.trigger ("फोकस");});

मेरा प्रश्न है, तो किसी को भी इस से पहले देखा और कुछ फ़ायरफ़ॉक्स प्रोफ़ाइल सेटिंग्स के माध्यम से इसे हल कर दिया है। मैंने निम्नलिखित संपत्ति को लोड करने का प्रयास किया है जिस पर इस मुद्दे पर कोई प्रभाव नहीं पड़ा।

profile.setAlwaysLoadNoFocusLib(true); 

परीक्षण उस संपत्ति के सक्षम होने से पहले विफल रहता है और रिमोट ड्राइवर फ़ायरफ़ॉक्स प्रोफाइल में लोड होता है।

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

धन्यवाद!

+0

तो ऐसा लगता है कि मुझे मिले पृष्ठों को कुछ महत्वपूर्ण जानकारी याद आ रही थी। फोकस समस्या को हल करने के लिए लिनक्स ग्रिड सर्वर पर आपके फ़ायरफ़ॉक्स इंस्टॉलेशन में आपको कुछ मैन्युअल चीजें करने की आवश्यकता है। मुझे यकीन नहीं है कि जब Lib स्थापित नहीं किया गया था तो setAlwaysLoadNoFocusLib (true) का उपयोग करने का प्रयास करते समय मुझे अपवाद नहीं मिला! दो लिंक जो मैं वर्तमान में देख रहा हूं वे निम्नलिखित हैं। http://code.google.com/p/selenium/wiki/NativeEventsOnLinux http://code.google.com/p/selenium/wiki/FocusStealingOnLinux यह नहीं लग रहा है कि वहाँ एक समाधान है की तरह मैक ओएसएक्स के लिए। – jjhughes57

+0

अपनी टिप्पणी को अपने प्रश्न के उत्तर के रूप में पोस्ट कर सकता है? इस तरह सवाल खोज परिणामों में अनुत्तरित के रूप में दिखाई नहीं देता है। – Potherca

+0

हां, या बस अपना प्रश्न हटाएं, जो आप उत्तर दे सकते हैं, जबकि आप कोई जवाब नहीं दे सकते। – djangofan

उत्तर

-1

आप इसे wrangle कर सकते हैं और इसे किसी भी समस्या के बिना अपने नियंत्रण में प्राप्त कर सकते हैं। सबसे पहले अपनी विंडो हैंडल आईडी द्वारा पॉपअप विंडो की पहचान करने के लिए एक विधि लिखें। फिर, जावास्क्रिप्ट में "window.focus()" निष्पादित करने के लिए जावास्क्रिप्ट एक्सप्लोरर का उपयोग करें ताकि आप किसी अन्य क्रिया को करने से पहले विंडो को ध्यान केंद्रित कर सकें। फिर, यदि आवश्यक हो तो आप पॉपअप को अपने विंडो हैंडल नाम से बंद कर सकते हैं।

2

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

Xvfb ... -screen 1 1200x800x24 -screen 2 1200x800x24 ... 

जब आप ब्राउज़र शुरू, यह करने के लिए एक अलग स्क्रीन आवंटित: आप Xvfb उपयोग कर सकते हैं

browser.setEnvironmentProperty("DISPLAY", ":N.1"); 
    browser.setEnvironmentProperty("DISPLAY", ":N.2"); 
    ... 
+0

पाइथन में फ़ायरफ़ॉक्स इंस्टेंस में DISPLAY चर सेट करने के लिए बस जोड़ें: 'firefox.add_command_line_options (' - display =: '+ str (display.display)) ' –

+0

पायथन उदाहरण के लिए धन्यवाद। सेलेनियम ग्रिड का उपयोग करके यह कैसे काम करेगा? ऐसा लगता है कि यह डिस्प्ले सेटिंग केवल तभी काम करती है जब आप उसी सर्वर पर परीक्षण चलाते हैं जहां xvfb स्थित है। यदि आप रिमोट सेलेनियम ग्रिड/हब/नोड के माध्यम से परीक्षण चलाते हैं, तो आप रिमोट के माध्यम से ड्राइवर बनाते हैं - कमांड लाइन विकल्प सेट करने के लिए वहां उपयोग करने के लिए कोई फ़ायरफ़ॉक्स बाइनरी नहीं है। –

0

मैं जेनकींस के साथ अपने निरंतर एकीकरण वातावरण में एक ही मुद्दा था। एक लंबे शोध के बाद मुझे old bug in firefox मिला जो उन समस्याओं से बचने के लिए new config flag का कारण बन गया।

समाधान इस ध्वज को फ़ायरफ़ॉक्स प्रोफ़ाइल पर सक्षम करने के लिए है जो परीक्षण का उपयोग करता है।ध्वज focusmanager.testmode है, इसे सत्य पर सेट करें।

enter image description here

स्पष्टीकरण फोकस घटनाओं ट्रिगर कर रहे हैं कि केवल जब फ़ायरफ़ॉक्स खिड़की सक्रिय है। यदि आप एकाधिक परीक्षण चलाते हैं तो आपके पास एकाधिक विंडो हैं इसलिए केवल सक्रिय एक फोकस ईवेंट ट्रिगर करता है। इस परम के साथ घटनाएं गैर सक्रिय विंडोज़ के लिए भी ट्रिगर की जाती हैं।