2015-04-02 8 views
20

मैं निम्नलिखित चलाकर मेरे चांदा परीक्षण शुरू:क्या मैं अपने प्रोटैक्टर कॉन्फ़िगरेशन फ़ाइल में पैरामीटर एक्सेस कर सकता हूं?

protractor protractor.conf.js --params.baseUrl=http://www.google.com --suite all 

मैं एक 'लॉन्च से पहले' समारोह जो एक पैरामीटर के निर्भर है चलाने के लिए चाहते हैं (इस मामले में, baseurl)। क्या यह संभव है?

exports.config = { 
    seleniumServerJar: './node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar', 
    seleniumPort: 4455, 
    suites: { 
     all: 'test/*/*.js', 
    }, 
    capabilities: { 
     'browserName': 'firefox' 
    }, 
    beforeLaunch: function() { 
     console.log('I want to access my baseUrl parameter here: ' + config.params.baseUrl); 
    }, 
    onPrepare: function() { 

     require('jasmine-reporters'); 
     jasmine.getEnv().addReporter(
      new jasmine.JUnitXmlReporter('output/xmloutput', true, true)); 

    } 
}; 

यदि मैं इसे चलाता हूं तो मुझे संदर्भ त्रुटि मिलती है क्योंकि कॉन्फ़िगरेशन परिभाषित नहीं किया जाता है। मैं कैसे करूं? क्या यह भी संभव है?

उत्तर

20

मैं पूरी तरह से यकीन है कि चांदा वैश्विक beforeLaunch() स्तर पर स्थापित कर रहे हैं, तो नहीं हूँ, लेकिन वे निश्चित रूप से onPrepare() कदम पर उपलब्ध हैं।

पहुँच वैश्विक browser वस्तु के माध्यम से params वस्तु:

console.log(browser.params.baseUrl); 

अद्यतन: जैस्मीन 2.6+, चांदा 4.x का उपयोग करना, browser.params खाली था, लेकिन onPrepare() कदम में काम किया है:

console.log(browser.baseUrl); 
+0

जहां तक ​​मुझे पता है, वे पहले लॉन्च() चरण में उपलब्ध नहीं हैं, लेकिन मेरे लिए उन्हें ऑनपेयर() चरण में रखने के लिए पर्याप्त है। आपके उत्तर – Julio

+0

के लिए धन्यवाद क्या इसका मतलब यह है कि हम इस तरह से पारित पैरामीटर के आधार पर 'चश्मा' सेट नहीं कर सकते हैं? मैंने कहा 'चश्मा: [browser.params.test_set +'/*। सुविधा ']', लेकिन "ब्राउज़र परिभाषित नहीं किया गया" मुझे लगता है कि ऐसा इसलिए है क्योंकि यह उस बिंदु पर बहुत जल्द है? – GreenAsJade

+0

@GreenAsJade हाँ, वैश्विक 'ब्राउज़र' ऑब्जेक्ट उस बिंदु पर उपलब्ध नहीं है। एक अलग प्रश्न बनाने पर विचार करें: अन्य उपयोगकर्ताओं के लिए एक ही समस्या का सामना करना पड़ता है, यह भविष्य में सहायक होगा। – alecxe

3

यदि आपको संपूर्ण कॉन्फ़िगरेशन फ़ाइल में प्रत्येक आइटम की आवश्यकता है, तो आप इसे करने के लिए browser.getProcessedConfig() का उपयोग कर सकते हैं।

onPrepare:() => { 
    browser.getProcessedConfig().then(console.log); // even `params` is in here 
} 
+0

ब्राउज़र।getProcessedConfig() केवल कॉन्फ़िगरेशन पुनर्प्राप्त कर सकता है, आप एक बुड सर्वर पर कॉन्फ़िगर चर के गतिशील परिवर्तन के लिए फ़्यूथर कॉन्फ़िगर ऑब्जेक्ट को परिवर्तित नहीं कर सकते हैं (यानी buildnumber सेट अप) – Marko

3

यहां एक नमूना अपने कोणमापक कॉन्फ़िग फ़ाइल और सेट चश्मा में cmd ​​लाइन आर्ग के माध्यम से पुनरावृति करने के लिए (और कुछ अन्य रन विन्यास मान) कमांड लाइन से सीधे कोड है:

config.js

// usage: protractor config.js --params.specs="*" --params.browser=ie --params.threads=1 
//  protractor config.js --params.specs="dir1|dir2" 
//  protractor config.js --params.specs="dir1|dir2/spec1.js|dir2/spec2.js" 

// process command line arguments and initialize run configuration file 
var init = function(config) { 
    const path = require('path'); 
    var specs; 
    for (var i = 3; i < process.argv.length; i++) { 
    var match = process.argv[i].match(/^--params\.([^=]+)=(.*)$/); 
    if (match) 
     switch (match[1]) { 
     case 'specs': 
      specs = match[2]; 
      break; 
     case 'browser': 
      config.capabilities.browserName = match[2]; 
      if (match[2].toLowerCase() === 'ie') { 
      config.capabilities.browserName = 'internet explorer'; 
      config.capabilities.platform = 'ANY'; 
      config.capabilities.version = '11'; 
      config.seleniumArgs = ['-Dwebdriver.ie.driver=' + path.join('node_modules', 'protractor' ,'selenium' ,'IEDriverServer.exe')]; 
      } 
      if (match[2] !== 'chrome' && match[2] !== 'firefox') 
      config.directConnect = false; 
      break; 
     case 'timeout': 
      config.jasmineNodeOpts.defaultTimeoutInterval = parseInt(match[2]); 
      break; 
     case 'threads': 
      config.capabilities.maxInstances = parseInt(match[2]); 
      config.capabilities.shardTestFiles = config.capabilities.maxInstances > 1; 
      break; 
     } 
    } 

    // generate specs array 
    specs.split(/\|/g).forEach(function(dir) { 
    if (dir.endsWith('.js')) 
     config.specs.push(dir); 
    else 
     config.specs.push(path.join(dir, '*.js')); 
    }); 

    return config; 
}; 

exports.config = (function() { 
    return init({ 
    specs: [], 
    framework: 'jasmine', 
    jasmineNodeOpts: { 
     defaultTimeoutInterval: 300000 // 5 min 
    }, 
    capabilities: { 
     browserName: 'chrome', 
     shardTestFiles: false, 
     maxInstances: 1 
    }, 
    directConnect: true 
    }); 
})(); 
संबंधित मुद्दे

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