使用Protractor传递每个浏览器的参数

时间:2017-07-28 11:48:42

标签: selenium protractor

刚开始使用Protractor进行E2E测试。

我想为chrome selenium server的每个实例传递参数(登录名和密码)。 我想要使​​用不同的用户帐户并行测试相同的spec文件。

这是我的conf.js:

 capabilities: {
        'browserName': 'chrome',
        'chromeOptions': {
            'args': ['--disable-web-security']
        },
        count: 10
    },

2 个答案:

答案 0 :(得分:0)

您可以在命令行上使用Protractor's params处理此问题。例如,您可以使用不同的用户名/密码开始每个测试,如下所示:

protractor conf.js --params.username user1 --params.password password1

然后,在你的测试中,你会使用这样的东西:

logIntoMyApp(browser.params.username, browser.params.password);

您还可以在配置文件中设置默认值(有关详细信息,请参阅文档)。

答案 1 :(得分:0)

你可以使用量角器的onPrepare-method。如果正在运行多个功能,则每个功能将运行一次。您可以将数据添加到可在执行期间使用的浏览器对象中。

你能做的就是这样的事情

// A JSON file or something
var login = {
  "chrome": {
    "user": "usernameChrome",
    "pass": "passwordChrome"
  },
  "firefox": {
    "user": "usernameFirefox",
    "pass": "passwordFirefox"
  }
};


// in your config
// An example configuration file.
exports.config = {
  directConnect: true,

  // Capabilities to be passed to the webdriver instance.
  multiCapabilities: [{
      'browserName': 'chrome'
    },
    {
      'browserName': 'firefox'
    }
  ],

  // Framework to use. Jasmine is recommended.
  framework: 'jasmine',

  // Spec patterns are relative to the current working directory when
  // protractor is called.
  specs: ['example_spec.js'],

  // Options to be passed to Jasmine.
  jasmineNodeOpts: {
    defaultTimeoutInterval: 30000
  },

  onPrepare: function() {
    return browser.getCapabilities()
      .then((capabilities) => {
        // Get the current browser you are using
        browser.browserName = capabilities.get('browserName').toLowerCase();
        // Add the user and pass to the browser-object
        browser.user = login[browser.browserName].user;
        browser.pass = login[browser.browserName] pass;
      });
  }
};

// In your spec
describe('logon', function() {
  it('should logon', function() {
    browser.get('http://www.example.com');

    element(by.model('user')).sendKeys(browser.user);
    element(by.model('pass')).sendKeys(browser.pass);
    element(by.tagName('button')).click();
  });
});