量角器 .sendKeys() 不能使用 ngModel 处理输入

Nat*_*ate 4 protractor e2e-testing angular two-way-binding angular5

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

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

我当前的代码。

...
it('should submit report.',() => {
    page.setField("100");
...
Run Code Online (Sandbox Code Playgroud)

上面引用了这个类和方法

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

export class Page {

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

和我的 html。

<input id="myField" decimal="16" dataLoadedEvent="{{formatData}}" [(ngModel)]="rm.dataField" class="form-control input-sm">
Run Code Online (Sandbox Code Playgroud)

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

注意事项:

  • 如果我从 html 输入字段中删除以下内容, .sendKeys() 工作

    decimal="16" dataLoadedEvent="{{formatData}}" [(ngModel)]="rm.dataField"
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果我只是删除

    decimal="16" dataLoadedEvent="{{formatData}}" 
    
    Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助,将不胜感激。

Nat*_*ate 5

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

field.clear().then(() => {
    field.sendKeys(text);
});
Run Code Online (Sandbox Code Playgroud)

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

希望这有助于某人。