我在Cypress中读到过,我不应该使用await,也不需要它,因为您可以通过链接来移除嵌套.这里我有一个cy.fixure嵌套在cy.origin中嵌套在cy.session中,有什么方法可以平坦这个吗?

  cy.session([], () => {
    cy.visit("")
    cy.origin("https://my-address.com", () => {
      cy.fixture("user").then((user) => {
        cy.get("#username").type(user.username)
        cy.get("#password").type(user.password)
      })

      cy.get("button[type='submit']").click()
      cy.url().should("equal", "/login-success")
    })
  })

Edit
This is not a question regarding regular javascript, it's Cypress specific and normal async / await won't work here.

推荐答案

不是真的(以任何方式变平).正如你所说,Async/AWait不适用于Cypress命令,因为它们不是promise .

嗯,您可以将promise 放在适当的位置并等待它们,但这很笨拙,而且实际上代码更多.

但是cy.session()cy.origin()是古怪的命令,它们只有在回调的作用下才能起作用--或者更准确地说,需要回调才能起作用.

cy.session()只在第一次调用时触发它的回调,在缓存会话数据并在第二次调用时返回它们之后,而不是重新调用回调.

cy.origin()使用回调为在另一个(指定)源上运行的代码创建一个隔离的沙箱,它甚至不是Java意义上的回调,因为它不能对外部作用域中的变量使用闭包.

它链接到fixture()部分.通常情况下,您可以导入或需要一个固定装置

const user = require('cypress/fixtures/user.json')

但是对于cy.Origin,这对您没有帮助,因为该装置是在外部范围中导入的,并且在cy.Origin沙箱中不可见.


有关promise 创建插件,请参见cypress-promise,但由于所述原因,它不能与会话和起源一起工作.

import promisify from 'cypress-promise'
 
it('should run tests with async/await', async () => {
  const foo = await promisify(cy.wrap('foo'))
  const bar = await promisify(cy.wrap('bar'))
 
  expect(foo).to.equal('foo')
  expect(bar).to.equal('bar')
})

Javascript相关问答推荐

使用ReactJS对Ant Design表中的空值进行排序

在HTML中使用脚本变量作为背景图像源

ReactJS中的material UI自动完成类别

react/redux中的formData在expressjs中返回未定义的req.params.id

成功完成Reducers后不更新状态

将现场录音发送到后端

CheckBox作为Vue3中的一个组件

为什么useState触发具有相同值的呈现

让chart.js饼图中的一个切片变厚?

Reaction组件在本应被设置隐藏时仍显示

Jest toHaveBeenNthCalledWith返回当前设置的变量值,而不是调用时的值

邮箱密码重置链接不适用于已部署的React应用程序

搜索功能不是在分页的每一页上进行搜索

使用线性插值法旋转直线以查看鼠标会导致 skip

使用可配置项目创建网格

将延迟加载的模块转换为Eager 加载的模块

重新渲染过多(&Q).REACT限制渲染次数以防止无限循环.使用REACT下拉菜单时

我如何才能获得价值观察家&对象&S的价值?

如何在加载页面时使锚定标记成为焦点

如何使pdf.js上的文本呈现为可选?