希望有人可以提供帮助。我在测试应用程序时遇到了一个问题。开发人员正在使用vue.js库,并且有几个字段可重新格式化输入的测试。因此,例如,如果您输入电话号码,则该字段将在需要的地方自动输入空格和连字符。这与“生日”字段相同,如果用户未输入,则会自动输入斜杠。
所以我遇到的问题是同时使用'setValue()'或'sendKeys()'输入文本的速度太快,字段中的光标有时无法跟上,并且输入的文本有时以不正确的顺序显示。例如,如果我尝试输入“ 123456789”。有时它最终会变成“ 132456798”(或任何其他组合)。这不能手动生成,有时测试可以通过。但是它的味道。
我想做的是编写一个自定义命令,以一种较慢的方式在它输入字符串的地方做一些事情。为此,我需要控制输入文本的速度。所以我在想这样的事情,我可以传递选择器和文本,然后每次输入一个字符,每个字符之间要有200毫秒的停顿。像这样:
let i = 0;
const speed = 200; // type speed in milliseconds
exports.command = function customSetValue(selector, txt) {
console.log(selector);
console.log(txt);
if (i < txt.length) {
this.execute(function () {
document.getElementsByName(selector).innerHTML += txt.charAt(i);
i++;
setTimeout(customSetValue, speed);
}, [selector, txt]);
}
return this;
};
在浏览器控制台中运行document.getElementsByName(selector)
时,我在必填元素上找到了一个匹配项。但是它没有输入任何文本。还要注意,我在其中添加了console.log
,实际上我希望它注销14次,但只记录了一次。所以就好像我的条件是否为假
我检查了我的if条件,它应该为true。因此不知道为什么不重复该功能。非常感谢您的帮助。
如果有帮助的话。我正在使用.execute()命令注入此处引用的javascript:https://nightwatchjs.org/api/execute.html
关于这个类型编写器的想法是基于这样的:https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_typewriter
答案 0 :(得分:0)
我们最终采用了一种更简单的方法。想要在这里发布,以防其他人需要类似的东西
exports.command = function customSetValue(selector, txt) {
txt.split('').forEach(char => {
this.setValue(selector, char);
this.pause(200); // type speed in milliseconds
});
return this;
};