量角器.sendKeys()对ngModel的输入不起作用

时间:2018-06-25 18:17:58

标签: angular protractor angular5 e2e-testing two-way-binding

关于这个主题,我一直找不到任何东西,所以我想问一下。

我目前正在我的 Angular 5应用程序上编写E2E测试。 E2E由 Protractor 执行,它是在默认Angular CLI生成器项目中配置的。我需要能够从E2E测试中更改文本输入字段的值。

我当前的代码。

AppServiceProvider

上面引用了此类和方法

...
it('should submit report.',() => {
    page.setField("100");
...

和我的html。

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

export class Page {

setField(text: string): Page {
    let field = element(by.id('myField'));
    field.sendKeys(text);
    return this;
}    
...

这很简单。显然,我已将其概括为用于消费...但是希望它仍然能说明问题。

注意事项:

  • 如果我从html输入字段中删除了以下内容,则.sendKeys()有效

    <input id="myField" decimal="16" dataLoadedEvent="{{formatData}}" [(ngModel)]="rm.dataField" class="form-control input-sm">
    
  • 如果我只是删除

    decimal="16" dataLoadedEvent="{{formatData}}" [(ngModel)]="rm.dataField"
    

    sendKeys()仍然不起作用。这意味着问题出在字段上发生的[(ngModel)]绑定。不能与我的自定义十进制格式指令一起使用。

所以,我的问题是,要使.sendKeys()与使用[[ngModel)]绑定的字段一起工作,我需要做什么?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

我能够通过以下操作解决此问题:

field.clear().then(() => {
    field.sendKeys(text);
});

我在谷歌搜索时看到了这种解决方案,但是我害怕在E2E测试中引入额外的异步流程(因为量角器通常对此并不友好)。但是,一旦实现了上述内容,我的字段就会开始更新。

希望这对某人有帮助。

答案 1 :(得分:1)

我也面临同样的问题。我的解决方法如下。

element(by.css('[name="firstName"]')).sendKeys('Protector User');