我的自动测试中有一个问题(硒)。
网络表单中的一个输入字段在哪里:
<input data-bind="value: searchText, valueUpdate: 'afterkeydown'"></input>
并建立这个领域的模型:
this.searchText = ko.observable('');
this.invert = ko.observable(false);
this.defferedSearchFilter = ko.pureComputed(function() {
return {
text: this.searchText(),
invert: this.invert()
}
}, this).extend({ rateLimit: { timeout: params.throttleInterval || 500, method: 'notifyWhenChangesStop' } });
通过defferedSearchFilter
变量中的值,过滤列表。自动测试通过算法检查此过滤器:
但有时(偶然<1%)计算两次场火,因为它没有看到最后输入的符号。例如,我从selenium和chrome收集日志(截图确认了他们的):
硒: [2017-07-17 15:41:31,224](DEBUG)填写By.CssSelector:.col3 .entityContent#linkListFastSearch_0,输入值: %95% - 成功
在这一刻,selenium创建了screenshoot。输入值 - %95%
铬: [5624:5680:0717 / 154131.625:INFO:CONSOLE(42)]“FastSearch id = 4已更改。新文本=” %95 “”,来源:{{ 3}}(42)
过滤后硒点击项目。 Selenuim: [2017-07-17 15:41:34,686](DEBUG)点击By.CssSelector:[id ='linkTargetCode_95'] - 成功
在节流间隔后,计算字段变为正确值。铬: [5624:5680:0717 / 154134.802:INFO:CONSOLE(42)]“FastSearch id = 4已更改。新文字=” %95% “”,来源:{ {3}}(42)
有没有人遇到过这样的问题?
答案 0 :(得分:1)
尝试使用textInput,textInput绑定将文本框()或文本区域()与viewmodel属性链接,提供viewmodel属性和元素值之间的双向更新。
与值绑定不同,textInput为DOM提供所有类型用户输入的即时更新,包括自动完成,拖放和剪贴板事件。
<input data-bind="textInput: searchText" />
浏览器在响应异常文本输入机制(如剪切,拖动或接受自动完成建议)时触发的事件高度不一致。值绑定,即使使用诸如valueUpdate:afterkeydown等额外选项来获取特定事件的更新,也不会涵盖所有浏览器上的所有文本输入方案。
textInput绑定专门用于处理各种浏览器怪癖,即使在响应不寻常的文本输入方法时也能提供一致且即时的模型更新。