पेज ऑब्जेक्ट मॉडल में सभी वर्गों को एक एकल ड्राइवर उदाहरण साझा करने की आवश्यकता है?

Dec 19 2020

मैं एक BaseTest.java फ़ाइल बना सकता हूँ और सार्वजनिक स्थैतिक वेबड्राइवर ड्राइवर की घोषणा कर सकता हूँ; इस में। फिर सभी कक्षाएं समान ड्राइवर संदर्भ का विस्तार और उपयोग कर सकती हैं।

फिर मेरी सभी परीक्षण कक्षाएं एक ही उदाहरण का उपयोग कर सकती हैं।

क्या में उपयोग कर सकता हूँ:

driver = new ChromeDriver(); 

हर परीक्षण विधि या ककड़ी परिदृश्य में। मैं उलझन में हूँ, ड्राइवर का उपयोग कैसे करें। क्या ड्राइवर क्रोम विंडो सेशन है?

जवाब

2 JoãoFarias Dec 19 2020 at 16:31

क्या ड्राइवर क्रोम विंडो सेशन है?

कोई ChromeDriver स्थानीय रूप से चल रहे Chrome ब्राउज़र को नियंत्रित करने की तुलना में एक सर्वर का प्रतिनिधित्व करता है। सर्वर ब्राउज़र के जीवनचक्र को नियंत्रित करेगा, जैसे कि दीक्षा, हत्या और क्रियाओं को नियंत्रित करना।

अधिक जानकारी के लिए, डॉक्स देखें

क्या मैं ड्राइवर = नया ChromeDriver () बना सकता हूं; हर परीक्षण विधि या ककड़ी परिदृश्य में

हां, लेकिन यह आपके संदर्भ पर निर्भर करेगा। यदि आप कुछ कार्यों में स्वतंत्र रूप से कई ब्राउज़र चलाना चाहते हैं, तो आप एक नया ड्राइवर बना सकते हैं।

बक्शीश:

मैं एक BaseTest.java फ़ाइल बना सकता हूँ और सार्वजनिक स्थैतिक वेबड्राइवर ड्राइवर की घोषणा कर सकता हूँ; इस में। फिर सभी कक्षाएं समान ड्राइवर संदर्भ का विस्तार और उपयोग कर सकती हैं।

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

2 PDHide Dec 19 2020 at 19:39

क्रोमेड्रिवर क्या है:

क्रोमेड्रिवर में कोड होता है जो ब्राउज़र के साथ इंटरैक्ट कर सकता है। एक एपीआई के माध्यम से इस आदेश को उजागर किया जाता है (यह वही है जो आप देखते हैं कि क्रोमहेडर स्थानीयहोस्ट पर शुरू हुआ: 14563)। कोड से हम इस एपी एंडपॉइंट तक पहुंचकर क्रोम ड्राइवर को कुछ करने के लिए कहते हैं।

उदाहरण के लिए, जब आप कहते हैं elem.click (), सेलेनियम एपीआई से बात करता है और क्रोमेड्रिवर को ब्राउज़र में निर्दिष्ट एलएम पर क्लिक करने के लिए कहता है। और क्रोम ड्राइवर इसे करता है और ब्राउज़र से प्रतिक्रिया देता है और इसे वापस आउट कोड देता है

हमें आधार वर्ग की आवश्यकता क्यों है

यह सुनिश्चित करना है कि चालक सत्र विभिन्न वर्गों के बीच पारित किए जाएं। और आप ऐसा कुछ नहीं कर पाएंगे

   page1.sendpassword()
   page1.sendusername()
   page1.submit()
   page2.adduser()

क्योंकि अगर आपके पास पेज 1 और पेज 2 के लिए अलग ड्राइवर सेशन है,

फिर एक बार जब आप पृष्ठ 2 शुरू करते हैं। एड्यूसर () क्रोम ड्राइवर को नया शुरू किया जाएगा और आपके पिछले लॉगिन सत्र उपलब्ध नहीं होंगे, इसलिए आपको फिर से लॉगिन करना होगा

इसके अलावा आप रिपोर्टिंग के लिए श्रोता वर्गों में स्क्रीनशॉट या ड्राइवर-विशिष्ट क्रियाएं नहीं जोड़ सकते हैं

आप बेस क्लास के बारे में अधिक पढ़ सकते हैं:

बेसटेस्ट क्लास बनाने का क्या उद्देश्य है जो पोम ढांचे में वैश्विक स्थिर वेबड्राइवर ऑब्जेक्ट की घोषणा करता है?

AlexeyR. Dec 19 2020 at 16:33

आपके कोड में WebDriver का उदाहरण एक प्रकार का चैनल है जिसका उपयोग आप वेब ड्राइवर कार्यान्वयन के एकल सत्र के साथ सहभागिता करने के लिए करते हैं। मूल रूप से आप अपने कोड में जो उपयोग करते हैं, उसे क्लाइंट बाइंडिंग कहा जाता है

एक WebDriver एक HTTP सर्वर है जो एक तरफ आपके क्लाइंट बाइंडिंग (जैसे जावा लाइब्रेरी) की ओर REST एपीआई को उजागर करता है और दूसरी तरफ ब्राउज़र को नियंत्रित कर सकता है।

तो आपके सभी कोड जो एक ही क्रोम सत्र (कुकीज़ आदि को संरक्षित करना) के साथ काम करने के लिए मान लिए जाते हैं, उन्हें वेब ड्राइवर का एक ही उदाहरण साझा करना होगा।

आपके कोड में एक और अधिक गोताखोर को तुरंत बंद करने से कुछ भी नहीं रोकता है। उस नए उदाहरण के माध्यम से आप एक अलग समानांतर पृथक ब्राउज़र सत्र का नियंत्रण प्राप्त करेंगे।