gpt4 book ai didi

cypress - 在 Cypress 中何时使用自定义命令与任务?

转载 作者:行者123 更新时间:2023-12-03 14:49:38 29 4
gpt4 key购买 nike

自定义命令和任务有什么区别?我试图了解它们应该如何使用。

自定义命令文档:https://docs.cypress.io/api/cypress-api/custom-commands.html

任务文档:https://docs.cypress.io/api/commands/task.html

最佳答案

A 命令 (全局 cy 对象上的大多数方法)是一个将操作放入(推送)到当前正在执行的命令队列的函数。队列以串行和异步方式执行(这就是为什么命令的返回值是一个具有 .then 方法的对象的原因——但尽管如此,并且它的行为与 promise 类似,它是 not a promise )。在上一个命令完成之前,下一个命令不会执行。
命令直接在浏览器中定义和执行。
custom command是一个常规命令,但由您定义,而不是 Cypress supplies out of the box 的默认命令.自定义命令对于自动化您在测试中反复重复的工作流程很有用(例如,通过将几个默认的 cy 命令组合在一起)。
命令用于与被测 Web 应用程序 (AUT) 交互——最显着的是与 DOM(例如,通过 cy.get(selector) 查询 DOM),并进行断言。
同样重要的是要意识到,当命令被串行执行时,它们会立即入队(在同一个事件循环滴答中),并且您传递给它们的任何表达式都会在那时和那里进行评估。这不是 Cypress 特定的行为,只是普通的 JavaScript。这就是为什么你不能做这样的事情:

// INCORRECT USAGE
let value;
cy.get('.myInput').invoke('val').then(val => value = val);
cy.get('.mySecondInput').type(value); // ✗ value is undefined here
您也不能使用 async/await :
// INCORRECT USAGE
let value;
// ✗ doesn't work on Cypress commands
const value = await cy.get('.myInput').invoke('val');
cy.get('.mySecondInput').type(value);

A 任务是在 Cypress 后端进程 (Node.js) 上定义和执行的函数,而不是在浏览器中。
要执行任务(您之前在 cypress/plugins/index.js 文件中定义),您需要首先通过 cy.task(taskName, data) 将其作为测试中的常规命令加入队列。 .然后 Cypress (当命令轮到它执行时)向执行任务的后端进程发送一条消息。
你的任务返回的数据被序列化(通过 JSON.stringify 或类似的东西)并发送回浏览器,在那里它被传递给你可能链接到你的 cy.task() 的回调。命令使用 .then(callback) .
任务主要用于与您自己的服务器后端通信,例如为数据库播种;或用于 I/O,例如读取/写入文件(尽管 cypress 为这些提供命令,例如 cy.exec() cy.writeFile() )。
没有默认任务 --- 您执行的每个任务首先需要定义自己。
另一个重要的一点是进程(Cypress 浏览器进程和 Cypress 节点进程)之间发送的消息是通过 IPC channel 发送的。 ,并且必须是可序列化的。这意味着您传递给 cy.task(taskName, data) 的数据被字符串化,以及从任务本身返回的响应。因此,发送例如包含方法的对象将不起作用(即,根本不会传输该方法)。

关于cypress - 在 Cypress 中何时使用自定义命令与任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58680757/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com