创建一个自定义命令作为setValue()的替代方法,在这里我可以控制类型速度

时间:2019-05-23 09:27:01

标签: javascript nightwatch.js

希望有人可以提供帮助。我在测试应用程序时遇到了一个问题。开发人员正在使用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

1 个答案:

答案 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;
};