如何在 Cypress 中输入很长的字符串来测试输入框?

Mad*_*sal 12 javascript automated-tests rich-text-editor reactjs cypress

我想测试 RichTextEditor 的字符限制(2000 个字符)的验证,但输入 2000 多个字符需要.type()花费大量时间。

有没有办法加快这个速度?我尝试使用 Ctrl+c 和 Ctrl+v 修饰符,但它不会复制粘贴输入框中的文本。

小智 15

减少延迟的问题{ delay: 0 }在于,它可以限制字符流,以防某些事件处理程序或验证无法处理最高速率。

另外,如果我用最简单的输入进行测试,则不附加 JavaScript

<input maxlength="2000">
Run Code Online (Sandbox Code Playgroud)

默认延迟 10 毫秒,测试需要 37 秒,但延迟为 0 时仍然需要24 秒。

我建议通过该val()方法设置 2000 个字符并键入最后一个

cy.get('input')
  .invoke('val', stringGen(2000))  // set 2000 chars
  .type('!')                       // add another
  .invoke('val')                   // read the value
  .should('have.length', 2000)     // confirm the last did not go in
Run Code Online (Sandbox Code Playgroud)

运行时间为0.6 秒

如果您有一些 javascript 事件处理程序,则需要在设置初始 2000 个字符后触发它们

.trigger('change')
Run Code Online (Sandbox Code Playgroud)

或者

.trigger('input')
Run Code Online (Sandbox Code Playgroud)

富文本编辑器

用于保存文本的富文本编辑器可以用方法而不是方法来<div>预加载。text()val()

您还需要识别接收文本的 div。

例如,react-quillql-editor在其主 div 上使用该类。

.trigger('change')
Run Code Online (Sandbox Code Playgroud)

反应羽毛笔的计时

{ delay: 10 }(默认) 32 秒
{ delay: 0 } 18 秒
预加载文本 1.5 秒

  • `&lt;div&gt;` 使用文本节点来保存文本,因此要调用的 jQuery 方法不是 `val`,而是 `text`。 (2认同)

小智 10

您可以将选项传递给类型函数type(text, options)

有关可用选项,您可以查看文档

对于您的情况,您可以尝试覆盖delay选项以删除输入持续时间。

inputField.type('a'.repeat(2000), { delay: 0})
Run Code Online (Sandbox Code Playgroud)