【问题标题】:Run some functionality before all test suites in Protractor在 Protractor 中的所有测试套件之前运行一些功能
【发布时间】:2017-02-23 18:11:41
【问题描述】:

是否可以在 Protractor 中的任何套件运行之前运行一些测试或逻辑流程?

例如,我想将我的 Protractor 测试分解为一系列套件,用于测试我的应用程序的不同方面。假设 Jenkins 将在部署之前运行整个测试套件,但个别开发人员将只运行与他们正在做的工作相关的套件。

但我希望我的大多数套件都能够登录到应用程序,并且我不想在每个套件中重复登录逻辑。有没有办法进行套件前测试,在所有测试运行之前执行诸如登录之类的操作?

我想在我的量角器配置中定义我的套件的地方列出这个,比如

suites: {
  'my-profile': [
    './e2e/login/login-as-customer.e2e-spec.js',
    './e2e/my-profile/my-profile-change-password.e2e-spec.js',
    './e2e/my-profile/my-profile-change-username.e2e-spec.js'
  ],
  'my-contacts': [
    './e2e/login/login-as-customer.e2e-spec.js',
    './e2e/my-contacts/add-contact.e2e-spec.js',
    './e2e/my-contacts/remove-contact.e2e-spec.js'
  ]
}

但问题是,当我们一起运行整个测试套件时,或者如果开发人员想要一起运行多个套件时,我不希望它每次都重新登录。我需要的是某种预套件步骤。

Protractor 可以做到这一点吗?

【问题讨论】:

  • 您不能在您的规范中使用beforeAll() 登录?
  • 我认为这仍然会导致登录发生在每个测试套件之前,即使一起运行也是如此。我说的是在所有测试套件之前这样做,而不是在所有规范之前。

标签: protractor end-to-end


【解决方案1】:

您正在寻找 conf 文件中的 onPrepare() 函数。该函数在测试套件之前运行。这是取自https://github.com/angular/protractor/blob/master/spec/withLoginConf.js的示例

onPrepare: function() {
    browser.driver.get(env.baseUrl + '/ng1/login.html');

    browser.driver.findElement(by.id('username')).sendKeys('Jane');
    browser.driver.findElement(by.id('password')).sendKeys('1234');
    browser.driver.findElement(by.id('clickme')).click();

    // Login takes some time, so wait until it's done.
    // For the test app's login, we know it's done when it redirects to
    // index.html.
    return browser.driver.wait(function() {
      return browser.driver.getCurrentUrl().then(function(url) {
        return /index/.test(url);
      });
    }, 10000);
  }

【讨论】:

  • 有没有办法为某些测试套件指定一个onPrepare,为其他测试套件指定一个不同的onPrepare?例如,如果某些测试需要使用一种类型的帐户登录,而另一些需要使用不同的帐户登录?
  • 不是,不是。为此,我建议为每个测试套件使用单独的 conf 文件。
  • 您可以使用 conf.js 中的 params 对象来提供测试运行的特定数据,例如帐户登录名或密码等。使用 - browser.params.login.email 访问它们 - 对于定义为的 param 对象- 参数:{登录:{电子邮件:'默认',密码:'默认'}}github.com/angular/protractor/blob/master/lib/config.tsmoduscreate.com/…
  • @A.Duff 我所做的是为每个用户创建一个新的浏览器,并将所有用户交互保持在同一个测试套件中。
  • @Grasshopper 我相信实施您提出的内容的完整指南在这里:moduscreate.com/blog/…
猜你喜欢
  • 2018-09-20
  • 2021-09-30
  • 2020-03-04
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2020-06-28
相关资源
最近更新 更多