在多个浏览器上运行测试(顺序)

时间:2017-07-06 08:15:32

标签: node.js selenium selenium-webdriver cucumber cucumberjs

我目前正在使用Chrome(驱动程序)进行测试。我想用Firefox和Safari测试它。一个接一个,它不能并行。

这是我开始测试的一项任务:

gulp.task('test', function() {
  return gulp.src('*test/features/*').pipe(cucumber({
    'steps': '*test/features/steps/*.js'
  }));
});

一个简单的功能文件:

Feature: UI
    Testing UI

    Scenario: Check the title of the page
        When I open the homepage
        Then I should see "Test - IntApp" in the title

步骤文件:

const chrome = require('selenium-webdriver/chrome');
const webdriver = require('selenium-webdriver');
const assert = require('assert');


module.exports = function () {
    let options = new chrome.Options();
    options.addArguments('start-maximized');

    var driver = new webdriver.Builder()
    .forBrowser('chrome')
    .setChromeOptions(options)
    .build();

    this.When('I open the homepage', function (done) {
        driver.get('http://intapp.dev/').then(done);
    });

    this.Then('I should see "Test - IntApp" in the title', function (done) {
        driver.getTitle().then(function(title) {
          assert.equal(title, "Test - IntApp");
        }).then(done);
    });


    this.registerHandler('AfterFeatures', function (features) {
        return driver.quit();
    });
};

我在想,也许我可以从gulp任务中以某种方式将浏览器的名称作为参数传递,但似乎不可能。

3 个答案:

答案 0 :(得分:1)

编写bash或批处理脚本并创建安装文件。

在设置文件中,您可以设置一个可以使用脚本更改的变量(通过编辑行),然后将其交给您声明将使用哪个驱动程序的位置。

此脚本将一个接一个地运行它们,但它们将是不同的套件(如果使用JSON或HTML输出,则创建不同的报告)。

这就是我现在一直在进行跨浏览器自动化的方式。

首选是使用bash over batch,因为bash可以在Mac,UNIX和Windows 10上运行,但批处理主要是Windows(从内存我认为它只是Windows)。

如果你需要有关从何处入手的指导,我可以根据要求给你一个大纲,但我应该给你足够的信息来研究如何去做。

答案 1 :(得分:1)

由于我想按顺序进行测试,这就是我想出的:

gulp.task('test', function(cb) {
  runSequence(
    'test-chrome',
    'test-firefox',
  cb);
});

gulp.task('test-chrome', function(cb) {
  return gulp.src('*test/features/*').pipe(cucumber({
      'steps': '*test/features/steps/*.js',
      'support': '*test/support/chrome.js'
    }));
});

gulp.task('test-firefox', function(cb) {
  return gulp.src('*test/features/*').pipe(cucumber({
      'steps': '*test/features/steps/*.js',
      'support': '*test/support/firefox.js'
    }));
});

答案 2 :(得分:0)

  

我在想,也许我可以将浏览器的名称作为参数传递   不知怎的,从gulp任务开始,但它似乎不可能。

请记住,每个浏览器都有自己的驱动程序,每个驱动程序都需要以自己的方式创建/初始化。

如果你按照你计划的方向前进, 您可以将所有浏览器句柄(在您创建它们之后)保留在一个数组中,然后只需按其名称拉出所需的浏览器句柄。