e2e使用量角器测试angular2应用程序时的错误

时间:2017-01-10 17:42:44

标签: angular typescript e2e-testing angular2-testing

我试图使用量角器在我的Angular2应用程序上运行一些简单的测试。我在一个命令提示符下运行ng serve,在另一个命令提示符中运行ng e2e。我得到了几个与会话异常相关的错误/评论。以下是其中的一部分:

ERROR:child_process_launcher.cc(536)] Failed to launch child process
...
I/direct - Using ChromeDriver directly...
I/launcher - Running 1 instances of WebDriver
E/launcher - session not created exception from tab crashed
(Session info: chrome=55.0.2883.87)
(Driver info: chromedriver=2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa
),platform=Windows NT 6.1.7601 SP1 x86_64)
  at WebDriverError (C:\development\SolarUI11\node_modules\protractor\node_mod
es\selenium-webdriver\lib\error.js:27:5)
  at SessionNotCreatedError (C:\development\SolarUI11\node_modules\protractor\
de_modules\selenium-webdriver\lib\error.js:308:5)
  at Object.checkLegacyResponse (C:\development\SolarUI11\node_modules\protrac
tor\node_modules\selenium-webdriver\lib\error.js:639:15)

我对Angular2和e2e测试非常陌生,所以我完全失去了我在这里看到的以及我应该期待的东西。

app.po.ts:

import { browser, element, by } from 'protractor';

export class SolarUi4Page {
  navigateTo() {
    return browser.get('http://localhost:4200/');
  }

  getTitle() {
    return element(by.css('h1')).getText();
  }

  getAddButton() {
    return element(by.css('.icon-plus'));
  }

  getAddButtonDp() {
    return element(by.binding('dPoint.tDataPoint'));
  }

  getAddButtonIccp() {
    return element(by.binding('dPoint.tICCP'));
  }
  getAddButtonStartD() {
    return element(by.binding('dPoint.tStartDate'));
  }

  getAddButtonEndD() {
    return element(by.binding('dPoint.tEndDate'));
  }

  getAddButtonSubmit() {
    return element(by.id('addSubmit'));
  }

  getStartDate() {
    return element(by.id('calStartTest'));
  }

  getEndDate() {
    return element(by.id('calEndTest'));
  }

  getSearchButton() {
    return element(by.css('.icon-search'));
  }

  getTable() {
    return element(by.id('myTable'));
  }
}

app.e2e-spec.ts:

import { SolarUi4Page } from './app.po';
import { by } from 'protractor';

describe('solar-ui4 main page', function() {
  let page: SolarUi4Page;

  beforeEach(() => {
    page = new SolarUi4Page();
  });

  it('should display title Solar Project', () => {
    page.navigateTo();
    expect(page.getTitle()).toEqual('Solar Project');
  });

  it('should add new value to array/table and display it', () => {
    page.navigateTo();
    let addButton = page.getAddButton();
    addButton.click();
    let addDp = page.getAddButtonDp();
    let addIccp = page.getAddButtonIccp();
    let addSd = page.getAddButtonStartD();
    let addEd = page.getAddButtonEndD();
    addDp.sendKeys('newDp');
    addIccp.sendKeys('newIccp');
    addSd.sendKeys('11/12/2016');
    addEd.sendKeys('11/20/2016');
    let addSubmit = page.getAddButtonSubmit();
    addSubmit.click();
    let startFormVal = page.getStartDate();
    let endFormVal = page.getEndDate();
    startFormVal.sendKeys('11/02/2016');
    endFormVal.sendKeys('12/20/2016');
    let searchButton = page.getSearchButton();
    searchButton.click();
    let table = page.getTable();
    let lastRow = table.all(by.tagName('tr')).last();
    expect(lastRow.get(0).getText()).toEqual('newDp');
    expect(lastRow.get(1).getText()).toEqual('newIccp');
    expect(lastRow.get(2).getText()).toEqual('11/02/2016');
    expect(lastRow.get(3).getText()).toEqual('12/20/2016');
  })

protractor.conf.js:

// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts

/*global jasmine */
var SpecReporter = require('jasmine-spec-reporter');

exports.config = {
  allScriptsTimeout: 11000,
  specs: [
    './e2e/**/*.e2e-spec.ts'
  ],
  capabilities: {
    'browserName': 'chrome'
  },
  directConnect: true,
  baseUrl: 'http://localhost:4200/',
  framework: 'jasmine',
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000,
    print: function() {}
  },
  useAllAngular2AppRoots: true,
  beforeLaunch: function() {
    require('ts-node').register({
      project: 'e2e'
    });
  },
  onPrepare: function() {
    jasmine.getEnv().addReporter(new SpecReporter());
  }
};

如果我需要显示更多错误/添加更多代码,请告知我们。

1 个答案:

答案 0 :(得分:-1)

这并不能解决Chrome / chromedriver / webdriver-manager的问题,但至少要让e2e测试正常运行,请更改protractor.conf.js中的浏览器:

'browserName': 'firefox'

然后e2e测试至少会在Firefox中运行。