关于这个主题,我一直找不到任何东西,所以我想问一下。
我目前正在我的 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)]绑定的字段一起工作,我需要做什么?
任何帮助将不胜感激。
答案 0 :(得分:2)
我能够通过以下操作解决此问题:
field.clear().then(() => {
field.sendKeys(text);
});
我在谷歌搜索时看到了这种解决方案,但是我害怕在E2E测试中引入额外的异步流程(因为量角器通常对此并不友好)。但是,一旦实现了上述内容,我的字段就会开始更新。
希望这对某人有帮助。
答案 1 :(得分:1)
我也面临同样的问题。我的解决方法如下。
element(by.css('[name="firstName"]')).sendKeys('Protector User');