前言
Cypress 是近年来比较流行的前端自动化测试工具,因为其简单易用的特点,受到越来越多开发人员和测试人员的关注。虽然 Cypress 自带了很多的功能,但是随着测试用例的增多,我们很容易发现有许多测试用例是有重复代码的,这时候就需要使用 Cypress 的自定义命令来提高测试效率。
本篇文章将详细介绍 Cypress 自定义命令的使用,帮助大家更好的应用 Cypress 进行前端自动化测试。
Cypress 自定义命令概述
Cypress 的自定义命令可以帮助我们封装一些测试用例中常用的操作,例如点击、输入、获取元素等等,从而避免重复代码的出现,使测试用例更加简洁、易读。自定义命令的写法实际上就是一个函数,它接收一些参数,然后通过 Cypress 提供的 API 执行对应的操作。
Cypress 自定义命令示例
在 Cypress 中定义自定义命令非常简单,我们只需要在 cypress/support/commands.js
文件中编写我们自己的命令即可。下面我们通过一个示例来介绍自定义命令的具体使用。
我们假设我们有一个网站,其中有一个表单页面,包含一个用户名输入框和一个登录按钮。我们需要测试填写用户名后可以登录成功。首先我们可以写一个元素选择器:
const usernameInput = () => cy.get('input[name="username"]'); const loginButton = () => cy.get('button[type="submit"]');
然后我们可以用下面的方式来封装一个自定义命令,以便在整个测试用例中使用:
Cypress.Commands.add("login", (username) => { usernameInput().type(username); loginButton().click(); });
这个自定义命令接受一个用户名参数,然后在输入框中填入这个用户名并点击登录按钮。当我们需要使用这个自定义命令时,只需要在测试用例中调用它即可:
it("should login successfully", () => { cy.visit("/login"); cy.login("testuser"); cy.url().should("include", "/dashboard"); });
在这个测试用例中,我们首先访问了登录页面,然后调用了上面定义的 login
命令,最后断言是否登录成功跳转到了仪表板页面。
Cypress 自定义命令进阶
除了上面介绍的最基本的自定义命令用法,Cypress 还提供了许多 API 可以用于进一步优化自定义命令的使用效果。下面我们通过示例来具体介绍一下这些高级用法。
1. 添加断言
有些自定义命令可能需要添加一些断言,以便在执行操作后校验一些预期结果。下面我们以验证登录页面标题为例:
Cypress.Commands.add("validateLoginPage", () => { cy.title().should("include", "Login"); });
这个自定义命令会使用 cy.title()
来获取页面标题,并校验是否包含 "Login" 字符串。这个自定义命令可以在测试用例中任何需要校验登录页面标题的地方使用:
it("should display the Login page", () => { cy.visit("/login"); cy.validateLoginPage(); });
2. 异步执行操作
有些 Cypress API 是异步的,如果你想在自定义命令中使用它们,可以使用 Cypress 提供的 .then()
函数来处理回调。下面我们以增加商品到购物车为例:
Cypress.Commands.add("addToCart", (productName) => { cy.get(".product").contains(productName).click(); cy.get(".add-to-cart-button").click().then(() => { cy.get(".cart-items-count .count").should("contains.text", "1"); }); });
这个自定义命令首先定位了商品元素,然后点击添加到购物车按钮。在添加成功后,使用 .then()
函数来校验购物车里是否包含了一个商品。
3. 链式调用命令
在 Cypress 测试中,有时候需要在命令之间进行切换,此时就需要使用 Cypress 提供的 .as()
函数给一个命令命名,并且使用 .get()
命令来获取它并链式调用这个命令。下面我们以搜索页面为例:
-- -------------------- ---- ------- ------------------------------ --------- -- - ------------------------------------ --------------------------------- ---------------------------------------- --- ------------------------------------ ------- -- - ------------------ ----------- ---------- --------- --- ---------- ------ --- ------ -------- -- -- - -------------------- --------------------- ------------------- -------------------------- ------------------- ---
这个自定义命令会进行一个搜索操作,然后命名了结果元素为 results
,最后在选择结果的时候使用了 .get("@results")
来获取这个元素,然后使用 .find()
命令来获取结果列表中的每个结果,以便点击它们。
总结
通过使用 Cypress 自定义命令,我们可以简化测试代码,并且提高测试用例的可读性和可维护性。在实际测试中,您可以根据项目中的特定需求来定义更多的自定义命令,以便更好地满足项目中的测试需求。希望本篇文章对您有所帮助,谢谢阅读!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645a02bc968c7c53b0c212fa