通过Grunt将量角器与Yeoman集成

use*_*090 41 angularjs gruntjs protractor e2e-testing

我想将Protractor与Yeoman生产的脚手架相结合.我按照教程进行操作,其中旧版本scenario-runner用于设置e2e测试(通过grunt).

我想升级我的脚手架并改用Protractor.
有什么想法吗?

小智 85

  1. 安装protractorgrunt-protractor-runner来自npm:

    npm install protractor grunt-protractor-runner --save-dev
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建量角器(配置文件protractor.conf.js),更改specsbaseUrl你的测试文件和测试服务器:

    exports.config = {
      seleniumAddress: 'http://localhost:4444/wd/hub',
      specs: ['test/e2e/*_test.js'],
      baseUrl: 'http://localhost:9001' //default test port with Yeoman
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 更新你的Gruntfile.js,在业力任务后添加以下内容:

    protractor: {
      options: {
        keepAlive: true,
        configFile: "protractor.conf.js"
      },
      run: {}
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 添加测试中的量角器任务

    grunt.registerTask('test', [
      'clean:server',
      'concurrent:test',
      'autoprefixer',
      'connect:test',
      'karma',
      'protractor:run'
    ]);
    
    Run Code Online (Sandbox Code Playgroud)
  5. 下载并启动selenium服务器:

    node_modules/protractor/bin/webdriver-manager update
    node_modules/protractor/bin/webdriver-manager start
    
    Run Code Online (Sandbox Code Playgroud)

    (在Windows中:)

    node node_modules/protractor/bin/webdriver-manager update
    node node_modules/protractor/bin/webdriver-manager start
    
    Run Code Online (Sandbox Code Playgroud)
  6. 更新你的package.json,之后添加以下内容"devDependencies".这将在之后运行命令,npm install因此您不需要每次都记住.

    "scripts": {
      "install": "node node_modules/protractor/bin/webdriver-manager update"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  7. 使用grunt运行测试

    grunt test
    
    Run Code Online (Sandbox Code Playgroud)

如果您希望量角器为您启动服务器,请删除

seleniumAddress: 'http://localhost:4444/wd/hub',
Run Code Online (Sandbox Code Playgroud)

from protractor.conf.js,然后运行grunt test将在测试期间启动一个独立的selenium实例,并在运行测试套件后退出它.

  • 结帐Matt Briggs'[grunt-start-webdriver] [(https://github.com/mbriggs/grunt-start-webdriver/blob/master/README.md)任务.这个grunt任务执行`webdriver-manager start`,阻止grunt构建,直到webdriver准备好接受连接. (3认同)
  • 我还必须在`grunt.registerTask上面添加`grunt.loadNpmTasks("grunt-protractor-runner")` (3认同)

Alw*_*ing 10

添加到现有答案的一件事情; 如果你想自动启动Selenium服务器,你还必须指定你的seleniumServerJar和chromeDriver(如果使用Chrome)的位置,否则测试将无法工作,直到你手动启动Selenium服务器(确保运行"webdriver-管理器更新"从命令行首先":

protractor: {
        options: {
            keepAlive: false,
            configFile: "test/config/protractor.conf.js",
            noColor: true, // If true, protractor will not use colors in its output.

            args: {
                seleniumServerJar: 'node_modules/protractor/selenium/selenium-server-standalone-2.39.0.jar',
                chromeDriver: 'node_modules/protractor/selenium/chromedriver.exe'
            }
        },
        run: {

        }
    },
Run Code Online (Sandbox Code Playgroud)


a d*_*ren 5

正如@ user2172816在他们的回答中提到的 - seleniumAddress: 'http://localhost:4444/wd/hub'从量角器配置中退出通常会导致Protractor为您启动Selenium实例.

作为替代方案,您可以使用grunt-protractor-webdriver启动Selenium:

1)安装并保存grunt-protractor-webdriver

npm install grunt-protractor-webdriver --save-dev
Run Code Online (Sandbox Code Playgroud)

2)将以下内容添加到您的Grunt定义函数中:

grunt.loadNpmTasks('grunt-protractor-webdriver');
Run Code Online (Sandbox Code Playgroud)

3)添加以下示例量角器webdriver任务:

protractor_webdriver: {
        start: {
            options: {
                path: 'node_modules/protractor/bin/',
                command: 'webdriver-manager start'
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

4)在运行量角器之前添加protractor_webdriver到您的test任务中

grunt.registerTask('test', [
    'clean:server',
    'concurrent:test',
    'autoprefixer',
    'connect:test',
    'karma',
    'protractor_webdriver',
    'protractor:run'
]);
Run Code Online (Sandbox Code Playgroud)