使用 Cypress 测试带验证码页面的技巧

阅读时长 5 分钟读完

在前端开发中,测试是一个不可或缺的环节。但是在带验证码的页面中,测试变得更加困难,因为验证码的识别需要人类的操作。在这篇文章中,我们将介绍使用 Cypress 测试带验证码页面的技巧。

前置知识

在开始本文之前,你需要对以下知识有一定的了解:

  • 基本的 Cypress 使用
  • 如何与 window 对象进行交互
  • 如何使用 cy.wait()cy.clock() 等 Cypress API

挑战:测试带验证码页面

在很多网站中,验证码是一个常见的安全措施。当用户登录或者执行其他敏感操作时,他们需要在表单中输入验证码。这意味着测试带验证码页面需要我们能够自动化输入验证码。

让我们以一个实际的示例为例。我们将测试一个登录页面,该页面需要输入用户名、密码和验证码才能登录。验证码是一个 4 位数字,随机生成并显示在页面上。

-- -------------------- ---- -------
--------------
- ---     -
--------------
- --      -
--------------
- ---    -
- ----       -
--------------
-            -
-  ----    -
--------------

测试的要求是:

  1. 输入正确的用户名和密码,以便让登录过程成功
  2. 在测试过程中,在验证码输入框中输入正确的验证码
  3. 测试应该避免在手动输入验证码的情况下手动进行测试
  4. 测试应该尽可能地自动化

解决方案

对于这个测试挑战,我们将提供以下解决方案:

  1. 确定验证码的值并自动输入
  2. 避免在测试过程中手动进行验证码操作

1. 确定验证码的值并自动输入

首先,我们需要确定生成验证码的代码,并在测试中使用它。在我们的示例中,生成验证码的代码如下所示:

这是一个返回 4 位随机数字的函数。

在 Cypress 中,我们可以通过 cy.window() 访问全局的 window 对象,并调用生成验证码的函数。

在这个代码片段中,我们首先获取验证码值,然后将其输入到验证码输入框中。这意味着我们需要知道验证码输入框的选择器,例如 input[name="verification-code"]

2. 避免在测试过程中手动进行验证码操作

为了避免在测试过程中手动进行验证码操作,我们需要模拟验证码输入的等待时间。在一般情况下,验证码会在页面加载完成后随机生成,因此我们可以在 Cypress 中使用 cy.wait()

但是,如果验证码的生成速度很快,等待时间太短,则可能无法捕获到验证码。

另一个解决方案是使用 cy.clock()setTimeout()。这个方案需要指定一个等待时间,并将 setTimeout()Date.now()cy.tick() 一起使用。

使用 Cypress 时,我们需要在测试代码开始之前初始化计时器(使用 cy.clock()),将当前的等待时间存储在一个变量中,并在 setTimeout() 中使用 cy.tick()

当计时器到达等待时间时,Cypress 将执行 cy.tick(),该函数将更新从开始计时器设置的 Webpack 时间。

通过这种方式,我们可以在测试过程中等待验证码的生成,并自动输入。

示例代码

以下是完整的示例代码,包括生成验证码的代码、确定选择器的代码和等待验证码生成并自动输入的代码。

-- -------------------- ---- -------
--------------------- -- -- -
  ------------- -- -
    -- ------ --------
    -- -------------------------
    -------------------

    --------------------------------------------------
    --------------------------------------------------
  ---

  ---------- -- -- -
    -- -------
    ----------- -- ------
    ----- -------- - ----- -- ---
    ------------- -- -
      ------------------
      ---------------------- -- -
        ----- ---- - -------------------------------- -- -----
        ----------------------------------------------------- -- -----
      ---

      ---------------------------------------- -- ------
    -- ----------
  ---
---

结论

在带验证码的页面中,测试是一项具有挑战性的任务。在本文中,我们介绍了使用 Cypress 测试带验证码页面的技巧。我们解释了如何确定验证码的值并自动输入,以及如何避免在测试过程中手动输入验证码。我们的解决方案最终提供了一种自动化测试的方法,可以在避免人为干预的情况下测试带验证码页面的代码。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6771f5056d66e0f9aad32af9

纠错
反馈