如何打开多个窗口或操作多个实例

时间:2015-01-10 04:13:04

标签: webdriver protractor

如果出于任何疯狂的原因我需要打开100个窗口/标签并导航到100个不同的链接,我该怎么做?我可以同时在所有100个测试中运行某些测试吗?

我们说我有一个阵列[' a'' b',' c'' d', ' e'],我需要测试某些表单是否适用于所有这些值。如何打开5个实例(或窗口或其他可以独立控制的实例)并同时测试它们? 例如:

  • 找到表单的输入文本框
  • 将文本值更改为数组之一
  • 点击提交按钮
  • 运行某些断言 和所有这些并行。同时测试所有数组值而不是逐个

upd :我想我可以使用

打开多个标签页
browser.executeScript("window.open('https://angularjs.org/', 'tab" + i + "')")

然而,这并不能让我真正并行地进行测试,因为我必须从一个标签跳到另一个标签, 假设所有标签都打开并加载:

1)从数组中选择值 2)修改输入框 3)单击“提交”按钮 4)切换到下一个选项卡 5)重复

是的,这仍然比在一个标签中测试所有内容,循环遍历数组并每次重置页面更快,但我需要找到更好的方法

1 个答案:

答案 0 :(得分:11)

启动100种不同的浏览器听起来非常低效,因此它们可以运行非常类似的场景。如果这些不同的值启动相同的流量,输出略有不同,您可能希望对这些值使用单元测试,并使用量角器运行一个或几个来端到端测试。

但要回答你的问题,有两种方法。

1)multiCapabilities:在这里,每个浏览器都会运行完全不同的测试。 (如果测试类似,您可能希望重用通用组件)。

exports.config = {
  specs: [
    // leave this empty if you have no shared tests. 
  ],

  multiCapabilities: [{
    'browserName': 'chrome',
    'specs': ['test1.js']
  }, {
    'browserName': 'chrome',
    'specs': ['test2.js']
  }, {
    'browserName': 'chrome',
    'specs': ['test3.js']
  }],
};

Doc:https://github.com/angular/protractor/blob/master/docs/referenceConf.js

2)browser.forkNewDriverInstance():在这里,您只运行一次测试,但测试可以在n个不同的浏览器中生成。缺点是,由于一切只进行了1次测试,如果100次中有1次失败,那么您只会遇到一次失败。

var runtest = function(input, output) {
  var newBrowser = browser.forkNewDriverInstance(true); // true means use same url
  // note I used newBrowser.element instead of element, because you are accessing the new browser. 
  newBrowser.element(by.model(...)).sendKeys(input).click();
  expect(newBrowser.element(by.css('blah')).getText()).toEqual(output);
};

describe('...', function() {
  it('spawn browsers', function() {
    browser.get(YOUR_COMMON_URL);

    runtest('input1', 'output1');
    runtest('input2', 'output2');
    runtest('input3', 'output3');
    runtest('input4', 'output4');
  });
});

Doc:https://github.com/angular/protractor/blob/master/docs/browser-setup.md#using-multiple-browsers-in-the-same-test