2011-09-05 5 views
5

के साथ कई ब्राउज़रों के खिलाफ सेलेनियम चलाना सेलेनियम का उपयोग करके और इसे चलाने के लिए mstest का उपयोग कर। मेरी समस्या यह है कि मैं अपने पूरे सूट को 3 अलग-अलग ब्राउज़रों (आईई, फ़ायरफ़ॉक्स और क्रोम) के खिलाफ चलाने के लिए चाहता हूं।एमएसटीईटी

मुझे क्या पता नहीं लगा सकता है कि कैसे एक सूट स्तर पर डेटा परीक्षण करने के लिए या विभिन्न paramateres के साथ सूट को फिर से चालू करने के लिए कैसे डेटा है।

मैं मैं अपने सभी परीक्षणों के लिए एक डेटा स्रोत जोड़ सकते हैं और एक से अधिक ब्राउज़र के खिलाफ अलग-अलग परीक्षण रन है, लेकिन उसके बाद मैं हर एक परीक्षण है जो मुझे नहीं लगता है के लिए डेटा स्रोत के लिए 2 लाइनों नकल करना होगा कर सकते हैं पता है बहुत अच्छा है उपाय।

तो कोई जानता है कि मैं अपनी असेंबली को डेटा कैसे शुरू कर सकता हूं? या अगर कोई और समाधान है।

उत्तर

0

यही वह है जो मैंने किया था। इस दृष्टिकोण का लाभ यह है कि यह किसी भी परीक्षण ढांचे (mstest, nunit, आदि) के लिए काम करेगा और परीक्षणों को खुद को ब्राउज़र के बारे में कुछ भी चिंतित या जानने की आवश्यकता नहीं है। आपको बस यह सुनिश्चित करने की आवश्यकता है कि विधि का नाम केवल विरासत पदानुक्रम में ही होता है। मैंने सैकड़ों परीक्षणों के लिए इस दृष्टिकोण का उपयोग किया है और यह मेरे लिए काम करता है।

  1. सभी परीक्षण बेस टेस्ट क्लास (जैसे बेसटेस्ट) से प्राप्त होते हैं।
  2. बेसटेस्ट एक सरणी में सभी ड्राइवर ऑब्जेक्ट्स (आईई, फ़ायरफ़ॉक्स, क्रोम) रखता है (नीचे मेरे उदाहरण में multiDriverList)। इस प्रकार

    public void RunBrowserTest([CallerMemberName] string methodName = null) 
    {    
        foreach(IDriverWrapper driverWrapper in multiDriverList) //list of browser drivers - Firefox, Chrome, etc. You will need to implement this. 
        { 
         var testMethods = GetAllPrivateMethods(this.GetType()); 
         MethodInfo dynMethod = testMethods.Where(
           tm => (FormatReflectionName(tm.Name) == methodName) && 
            (FormatReflectionName(tm.DeclaringType.Name) == declaringType) && 
            (tm.GetParameters().Where(pm => pm.GetType() == typeof(IWebDriver)) != null)).Single(); 
         //runs the private method that has the same name, but taking a single IWebDriver argument 
         dynMethod.Invoke(this, new object[] { driverWrapper.WebDriver }); 
        } 
    } 
    
    //helper method to get all private methods in hierarchy, used in above method 
    private MethodInfo[] GetAllPrivateMethods(Type t) 
    { 
        var testMethods = t.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance); 
        if(t.BaseType != null) 
        { 
         var baseTestMethods = GetAllPrivateMethods(t.BaseType); 
         testMethods = testMethods.Concat(baseTestMethods).ToArray(); 
        } 
        return testMethods; 
    } 
    
    //Remove formatting from Generic methods 
    string FormatReflectionName(string nameIn) 
    {    
        return Regex.Replace(nameIn, "(`.+)", match => ""); 
    } 
    
  3. उपयोग::

  4. BaseTest में निम्न विधियों है

    [TestMethod] 
    public void RunSomeKindOfTest() 
    { 
        RunBrowserTest(); //calls method in step 3 above in the base class 
    } 
    private void RunSomeKindOfTest(IWebDriver driver) 
    { 
        //The test. This will be called for each browser passing in the appropriate driver in each case 
        ...    
    }  
    
0

ऐसा करने के लिए, हम webdriver के चारों ओर एक आवरण लिखा था और हम एक स्विच आधारित कथन का उपयोग एक ब्राउज़र पर ब्राउज़र प्रकार का चयन करने के लिए।

यहाँ एक टुकड़ा है। वांछित क्षमताओं का उपयोग करके, आप ग्रिड को बता सकते हैं कि किस ब्राउज़र के विरुद्ध निष्पादित करना है।

switch (Controller.Instance.Browser) 
      { 
       case BrowserType.Explorer: 
        var capabilities = DesiredCapabilities.InternetExplorer(); 
        capabilities.SetCapability("ignoreProtectedModeSettings", true); 
        Driver = new ScreenShotRemoteWebDriver(new Uri(uri), capabilities, _commandTimeout); 
        break; 
       case BrowserType.Chrome: 
        Driver = new ScreenShotRemoteWebDriver(new Uri(uri), DesiredCapabilities.Chrome(), _commandTimeout); 
        break; 
      }