Bak*_*aki 6 javascript cypress cypress-origin
我读到在 Cypress 中我不应该使用它await,也不需要它,因为您可以通过链接删除嵌套。这里我有一个cy.fixure嵌套 incy.origin嵌套 in 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")
})
})
Run Code Online (Sandbox Code Playgroud)
编辑
这不是关于常规 javascript 的问题,它是Cypress特定的,正常的 async/await 在这里不起作用。
不是真的(任何方式来压平)。正如您所说, async/await 不适用于 Cypress 命令,因为它们不是承诺。
好吧,您可以将承诺放在适当的位置并等待它们,但这很笨拙,而且实际上需要更多代码。
但是cy.session()和cy.origin()是一些时髦的命令,它们仅因回调而起作用 - 或者更准确地说需要回调才能起作用。
cy.session()仅在第一次调用时触发回调,此后它会缓存会话数据并在第二次调用时返回它们,而不是重新调用回调。
cy.origin()使用回调为针对其他(指定)源运行的代码创建一个隔离的沙箱,它甚至不是 Javascript 意义上的回调,因为它不能对外部作用域中的变量使用闭包。
其中链接到该fixture()部分。通常您可以导入或需要夹具
const user = require('cypress/fixtures/user.json')
Run Code Online (Sandbox Code Playgroud)
但对于 cy.origin 来说这对你没有帮助,因为固定装置是在外部范围中导入的,并且在 cy.origin 沙箱内看不到。
对于创建 Promise 的插件,请参阅cypress-promise,但由于所述原因,它不能与 session 和 origin 一起使用。
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')
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |