programing

프로젝터 구성 파일의 매개 변수에 액세스할 수 있습니까?

i4 2023. 3. 17. 19:36
반응형

프로젝터 구성 파일의 매개 변수에 액세스할 수 있습니까?

다음 작업을 수행하여 절단기 테스트를 시작합니다.

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

하나의 파라미터(이 경우는 baseUrl)에 의존하는 'before launch' 함수를 실행하고 싶습니다.그게 가능합니까?

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));

    }
};

이 설정을 실행하면 Configuration이 정의되어 있지 않기 때문에 ReferenceError가 표시됩니다.어떻게 하면 좋을까요?그게 가능하긴 해?

각도기 글로벌이 다음에서 설정되었는지 완전히 확신할 수 없습니다.beforeLaunch()스테이지, 하지만 그들은 확실히 다음 장소에서 구할 수 있다.onPrepare()걸음.

액세스params전 세계를 통해 이의를 제기하다browser오브젝트:

console.log(browser.params.baseUrl);

업데이트: Jasmine 2.6+, extractor 4.x, browser.params는 비어있었지만 다음 기능이 동작했습니다.onPrepare()순서:

console.log(browser.baseUrl);

컨피규레이션파일 전체의 모든 항목이 필요한 경우,browser.getProcessedConfig()이 일을 하기 위해서.

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

다음은 Protractor 구성 파일에서 cmd 행 arg를 반복하고 명령줄에서 직접 사양(및 일부 다른 실행 구성 값)을 설정하는 샘플 코드입니다.

config.discloss 。

// 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
  });
})();

간단한 솔루션

프로젝터는 노드 프로세스입니다.모든 노드 프로세스는 커스텀노드 변수를 사용하여 시작할 수 있습니다.Windows 에서는 어떻게 동작하고 있는지는 잘 모르지만(방법을 알고 있는 경우는 코멘트해 주세요), Mac 및 Linux/unix OS 에서는 다음과 같은 환경변수로 프로젝터를 기동할 수 있습니다.

MY_VAR=Dev protractor tmp/config.js

그러면 프로세스 내 어디에서나 사용할 수 있습니다.

console.log(process.env.MY_VAR)

외부에서도 onPrepare 고객님의 구성

언급URL : https://stackoverflow.com/questions/29406962/can-i-access-parameters-in-my-protractor-configuration-file

반응형