如何使用赛普拉斯将文本框中的值存储在另一个变量中
How to store the value from text box in another variable using Cypress
name="titleEn" data-testid="edit-category-title-en" type="text" placeholder="输入类别标题" value="vxfifyem"
根据目的,有几种方法可以做到:
- 全局范围变量:(错误做法)
let myValue;
before(()=> {
cy.get('[data-testid="edit-category-title-en"]').then($el => {
myValue = $el.text();
})
})
it(()=> {
cy.log(myValue) // myValue is now available
})
但是,正如您所见,回调和变量调用不能在同一范围内使用,否则变量将为空。
如果您在公共范围内需要它,那么您可以使用 Cypress.Promise 实用程序,因此 Cypress 将不会继续,直到承诺得到解决。
it('', async () => {
const myValue = await new Cypress.Promise((resolve) => {
cy.get('[data-testid="edit-category-title-en"]')
.invoke('text')
.then((txt) => resolve(txt.toString()))
})
})
cy.log(myValue) // myValue is available
- 使用赛普拉斯别名(最佳实践)
我建议先抛出文档:Cypress Variables and Aliases
cy.get('[data-testid="edit-category-title-en"]').invoke('text').as('myValue');
那么您可以通过以下方式调用它:cy.get('@myValue')
。
name="titleEn" data-testid="edit-category-title-en" type="text" placeholder="输入类别标题" value="vxfifyem"
根据目的,有几种方法可以做到:
- 全局范围变量:(错误做法)
let myValue;
before(()=> {
cy.get('[data-testid="edit-category-title-en"]').then($el => {
myValue = $el.text();
})
})
it(()=> {
cy.log(myValue) // myValue is now available
})
但是,正如您所见,回调和变量调用不能在同一范围内使用,否则变量将为空。
如果您在公共范围内需要它,那么您可以使用 Cypress.Promise 实用程序,因此 Cypress 将不会继续,直到承诺得到解决。
it('', async () => {
const myValue = await new Cypress.Promise((resolve) => {
cy.get('[data-testid="edit-category-title-en"]')
.invoke('text')
.then((txt) => resolve(txt.toString()))
})
})
cy.log(myValue) // myValue is available
- 使用赛普拉斯别名(最佳实践)
我建议先抛出文档:Cypress Variables and Aliases
cy.get('[data-testid="edit-category-title-en"]').invoke('text').as('myValue');
那么您可以通过以下方式调用它:cy.get('@myValue')
。