2013-10-14 7 views
5

मैं एक पुस्तकालय विकसित कर रहा हूं जो कुछ कस्टम आदेशों के साथ सेलेनियम 2 को बढ़ाता है। पुस्तकालय सेलेनियम के जावा और पायथन बाइंडिंग के साथ-साथ सेलेनियम आईडीई में प्रयोग योग्य होना चाहिए। मेरे research से, इन तीन लक्षित बाइंडिंग में सेलेनियम 2 स्क्रिप्ट्स का कम से कम 80% शामिल होना चाहिए।सेलेनियम वेबड्राइवर: मैं किस हद तक जावास्क्रिप्ट पर भरोसा कर सकता हूं?

सेलेनियम आईडीई के लिए मेरे कस्टम आदेशों को लागू करने के लिए, मुझे लगता है कि मुझे जावास्क्रिप्ट में इसके लिए एक प्लगइन लिखना होगा।

मेरा प्रश्न यह है: यदि मेरे पास पहले से ही जावास्क्रिप्ट में मेरे कस्टम कमांड का कार्यान्वयन है, तो क्या यह जावा लाइब्रेरी और पाइथन बाइंडिंग के लिए इस क्रियान्वयन का पुन: उपयोग करना सुरक्षित है?

मैं ऐसे दृष्टिकोण के बारे में सोच रहा हूं जो WebDriver#executeScript के माध्यम से मेरे आदेशों के जावास्क्रिप्ट कार्यान्वयन को इंजेक्ट करता है। मैं जो सोच रहा हूं उसका एक स्यूडोकोड कार्यान्वयन यहां है।

जावा में:

public void fooJava() { 
    executeScript("Inject code.js"); 
    executeScript("fooJavaScript();"); 
} 

code.js में:

function fooJavaScript() { 
    // Implementation of command "foo" from Selenium IDE plugin. 
} 

तो, जावा में अपने कस्टम आदेश fooJava() निष्पादित करने के लिए, मेरी लाइब्रेरी के code.jsexecuteScript के माध्यम से ब्राउज़र में इंजेक्ट किया जाएगा। कहें, इसमें जावास्क्रिप्टfoo का कार्यान्वयन होगा। अगले executeScript कॉल में, यह fooJavaScript तब कॉल किया जाएगा।

इस दृष्टिकोण मुझे मेरी कस्टम लागू करने के लिए होने से रोका जा सके जबकि आदेश में तीन बार (जावा, अजगर, सेलेनियम आईडीई), मैं कुछ चिंताएं हैं:

  1. जब मैं इंजेक्षन मेरी code.js, खतरे में मैं कर रहा हूँ वेबसाइट की वैश्विक स्थिति को नष्ट करने के लिए?
  2. मैं किस हद तक जावास्क्रिप्ट पर भरोसा कर सकता हूं? यदि कोई चेतावनी संवाद मौजूद है तो क्या यह काम करेगा? अभ्यास में, सेलेनियम के साथ उपयोग किए जाने वाले कितने ड्राइवर समर्थन जावास्क्रिप्ट नहीं करते हैं? उदाहरण के लिए। HtmlUnit?
  3. क्या यह सभी प्रमुख ब्राउज़रों (आईई, क्रोम, फ़ायरफ़ॉक्स, सफारी के कुछ हाल के संस्करण) में काम करेगा?

इसके साथ आपके वास्तविक जीवन के अनुभवों की बहुत सराहना की जाएगी।

+4

मेरे "वास्तविक जीवन अनुभव" से .. मैंने परीक्षण करते समय जावास्क्रिप्ट का उपयोग करने के लिए _rarely_ की आवश्यकता है। मेरी राय में, यदि आप कुछ जावास्क्रिप्ट ईवेंट को स्पार्क करने की ज़रूरत है तो यह खराब ऐप डिज़ाइन है। यह आमतौर पर यूआई से दूर करने के लिए सिर्फ खराब डिजाइन है .. मेरा मतलब है, यही वह है जो आप परीक्षण कर रहे हैं, है ना? – sircapsalot

उत्तर

1

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

WebDriver = एकीकरण परीक्षणों
जे एस = अगर आप चाहते हैं इकाई

परीक्षण मैं अपने उपयोग के मामलों ठीक-ठीक पता नहीं है, लेकिन: आप एकीकरण परीक्षणों को चलाने के लिए प्रयास कर रहे हैं

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

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

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

स्रोत: 10,000+ कर्मचारी सॉफ्टवेयर सह में एक क्यूई के रूप में अनुभव।

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