36

我找不到任何关于如何设置的信息,但这似乎是一个非常基本的概念,所以我确信那里有答案。

我知道如何通过在配置中设置对象的browserName属性来在不同的浏览器上运行量角器capabilities。这很好用。我可以将它设置为'chrome'or'firefox'或任何我需要的东西,它会按预期运行。但是针对多个浏览器运行单个测试套件的唯一方法(据我所知)是创建单独的配置文件,每个配置文件都不同browserName,然后使用自己的配置运行每个浏览器。这行得通,但它真的很慢,因为测试是按顺序运行的,而不是同时运行的。

有没有办法在多个浏览器上并行运行它?

可以在 SauceLabs 上完成吗?甚至使用本地 Selenium-Grid?

我们只是试图简化我们的测试过程,这将是一个巨大的帮助。任何建议或信息将不胜感激。提前致谢。

4

6 回答 6

65

有一个新的选项要求multiCapabilities

multiCapabilities: [{
  'browserName': 'chrome'
}, {
  'browserName': 'firefox'
}],

这是一个完整的例子

于 2014-02-20T14:40:21.037 回答
22

2014 年 2 月更新 - 此答案不再有效。在下面使用 Paolo Moretti 的答案。


可能有更好的方法来做到这一点,但目前我只是将这些作为并发的 Grunt 任务执行。

1) 添加 grunt 并发插件

npm install grunt-concurrent --save-dev

2) 在 grunt.initConfig 下为每个浏览器添加一个任务。我们可以将浏览器添加为 arg 以重用我们的配置文件。

protractor: {
        options: {
            keepAlive: true,
            singleRun: false,
            configFile: "test/protractor.conf.js"
        },
        run_chrome: {
            options: {
                args: {
                    browser: "chrome"
                }
            }
        },
        run_firefox: {
            options: {
                args: {
                    browser: "firefox"
                }
            }
        }
    },

3)将这些注册为任务;

grunt.registerTask('protractor-chrome', ['protractor:run_chrome']);
grunt.registerTask('protractor-firefox', ['protractor:run_firefox']);

4) 在 grunt.initConfig 下创建你的并发任务

concurrent: {
        protractor_test: ['protractor-chrome', 'protractor-firefox']
    },

5) 为并发添加 grunt 任务

grunt.registerTask('protractor-e2e', ['concurrent:protractor_test']);

执行它应该会给你并发量角器测试。

于 2013-12-23T07:13:28.713 回答
14

usingmultiCapabilities将在每个浏览器中运行所有测试。因此,下面的配置将运行每个测试两次,一次在 Firefox 中,一次在 Chrome 中:

multiCapabilities: [{
  'browserName': 'chrome'
}, {
  'browserName': 'firefox'
}],

如果您希望每个测试文件只运行一次,但在多个浏览器之间拆分,请使用以下splitTestsBetweenCapabilities选项:

splitTestsBetweenCapabilities: true

这篇博文更详细地介绍了splitTestsBetweenCapabilities

于 2014-06-16T18:41:05.767 回答
1

我遇到了同样的问题,我发现他们正在添加我们所说的并行执行功能!:D

看看这个:https ://github.com/angular/protractor/pull/492

该更改已合并到 master,但较新的更改 (512) 仍处于打开状态。一旦他们将它合并到 master (根据拉取请求中的讨论应该是今天或明天)它应该在你手中:D。

于 2014-02-13T03:44:50.737 回答
1

BrowserStack 也可用于此目的。它有非常详细的入门指南:https ://www.browserstack.com/automate/node ,但它不是免费的

于 2014-11-25T05:26:09.000 回答
1

这就是我实现这一目标的方式。只需将以下部分添加到 conf.js 文件中:

capabilities: {
  browserName: 'chrome',
  shardTestFiles: true,
  maxInstances: 1
}

shardTestFiles = true使每个规范文件在新的浏览器实例中运行。maxInstances是可以同时打开的浏览器的最大数量。

于 2016-03-07T22:17:17.400 回答