【问题标题】:Pass parameters for each browser using Protractor使用量角器为每个浏览器传递参数
【发布时间】:2017-07-29 16:17:33
【问题描述】:

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

我想为每个 chrome selenium 服务器实例传递参数(登录名和密码)。 我想用不同的用户帐户并行测试相同的规范文件。

这是我的 conf.js:

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

【问题讨论】:

    标签: selenium protractor


    【解决方案1】:

    您可以使用 Protractor 的 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();
      });
    });

    【讨论】:

      【解决方案2】:

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

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

      然后,在你的测试中,你会像这样使用它们:

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

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

      【讨论】:

      • 为您的重播想盐水。但就我而言,我希望为创建的每个实例传递参数。我在我的 conf.js count: 10 中使用了计数属性。因此,对于所有 chrome 实例,都将使用 user1 作为登录名,使用 password1 作为密码。例如,我希望第一个实例使用 Login1 和 Password1,第二个使用 Login2 和 Password2 ....
      • 在这种情况下,您的问题没有足够的信息。我建议进一步充实它,并包括你真正想要完成的事情。例如。您是否正在尝试进行负载测试?祝你好运。
      猜你喜欢
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多