【问题标题】:Protractor - unknown error: angular is not defined when using by.model量角器 - 未知错误:使用 by.model 时未定义角度
【发布时间】:2017-06-15 03:52:38
【问题描述】:

我正在为我的 Angular 组件编写一些量角器测试,当我尝试使用 by.model 选择输入元素时,不断收到错误“未知错误:未定义角度”。

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

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

但是当我尝试做这样的事情时,它会因角度未定义错误而失败:

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 unit-testing webpack protractor end-to-end


【解决方案1】:

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

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

根据angular/protractor's current readme

Protractor 可与 AngularJS 1.0.6/1.1.4 以上的版本一起使用,并且与 Angular 应用程序兼容。请注意,对于 Angular 应用程序,不支持 by.binding()by.model() 定位器。我们建议使用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

【讨论】:

  • 我不明白,我什么时候可以使用 by.binding?
  • @FernandoGabrieli 显然,你不能,它们在 Angular 应用程序中不受支持,答案中引用的自述文件说。
  • 这意味着我们不能将 by.model 或 by.binding 用于 Angular 9 或 Angular 10 应用程序?
  • 谢谢,这对我很有帮助 :) 并为我节省了很多时间
猜你喜欢
  • 2018-10-25
  • 2016-07-12
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
相关资源
最近更新 更多