Protractor - unknown error: angular is not defined when using by.model

Protractor - unknown error: angular is not defined when using by.model

我正在为我的 Angular 组件编写一些量角器测试,当我尝试使用 by.model 到 select 输入时,一直收到错误 "unknown error: angular is not defined"元素.

这很奇怪,因为如果我这样做,它可以正常工作并通过:

it('should have an input element for searching', () => {
    var inputElement = element(by.model('searchText');
    expect(inputElement).toBeDefined();
});

但是当我尝试做这样的事情时它失败了 angular 未定义的错误:

it('should filter the search text', () => {
     var inputElement = element(by.model('searchText');
     expect(inputElement).toBeDefined();

     inputElement.clear()
     inputElement.click();
     inputElement.sendKeys('ICBC');

     var tableLengthRow = element.all(by.css('.animate-repeat').count();
     expect(tableLength).toBe(1);
});

如果我替换这一行:

var inputElement = element(by.model('searchText');

这个:

var inputElement = element.all(by.tagName('input')).get(0);

测试通过,剩下的按我所知道的去做。

有谁知道为什么上面的第一个测试适用于 by.model 而不是我实际单击元素的第二个测试?

然后如何使用 Webpack 和 npm 在页面上定义 angular?

谢谢

by.model 在 Angular 中不受支持(angular2、angular4 和 on)。

推荐的替代方案是 by.css()

根据angular/protractor's current readme

Protractor works with AngularJS versions greater than 1.0.6/1.1.4, and is compatible with Angular applications. Note that for Angular apps, the by.binding() and by.model() locators are not supported. We recommend using by.css().

Angular Guide - E2E Tests 处的替代示例:

Previous code               New code         Notes
by.model('$ctrl.query')     by.css('input')  The model matcher relies on AngularJS ng-model
by.model('$ctrl.orderProp') by.css('select') The model matcher relies on AngularJS ng-model