通过字符串

时间:2017-06-27 19:50:47

标签: javascript protractor

目标:通过将字符串评估为变量来迭代我的conf.js文件中的电子邮件。

我尝试过使用eval(string name)window[string name]this[string name]

我收到的错误如下:

  

意外数字;

     

每个键必须是多个字符串;未定义;

等等。使字符串像变量名一样运行的正确方法是什么?问题出现在for循环的倒数第二行。非常感谢您的见解!

在我的 conf.js 文件中,我的电子邮件地址存储如下:

// conf.js
exports.config = {
  framework: 'jasmine',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  params: {
    login: {
      username: '*********',
      password: '*********.'
    },
    website: {
      url: '*********',
    },
    testEmails: {
      // First address
      1: '*****@gmail.com',

      // Second address
      2: '*****@gmail.com',
    }
  }
}

spec.js

describe('Testing |', function() {

  var initialLink = ('https://').concat(browser.params.website.url);

  function loadPage(a) {
    browser.get(a);
  }

  function login(a, b) {
    element(by.model('login.userName')).clear().sendKeys(a);
    element(by.model('login.password')).clear().sendKeys(b);
    element(by.id('btnLogin')).click();
  }

  function send(a, b){
    element(by.id('btnCompose')).click();
    element(by.id('toCtrl_new')).sendKeys(a);
    element(by.id('subjectCtrl')).sendKeys(b);

    browser.driver.sleep(2000);
    element(by.id('btnCancel')).click();
    browser.waitForAngular();
  }

  it('should send emails', function() {
    loadPage(initialLink);
    login(browser.params.login.username, browser.params.login.password);
    element.all(by.repeater('module in ui.forUser')).get(3).click();

    for(var i = 1; i < 38; i++){
      var prefix = "browser.params.testEmails.";
      var complete = prefix.concat(i);
      var toWhom = eval(complete);
      send(toWhom, 'Testing');
    }

  });

});

1 个答案:

答案 0 :(得分:2)

以下是您可以做的事情:

for (key in browser.params.testEmails) {
  var toWhom = browser.params.testEmails[key];
  send(toWhom, 'Testing');
}