在cypress中存储值,需要使用别名因为cypress的异步特性const value = cy.get('div').text()
不会给你你预期的输出。
赛普拉斯的价值观和别名
您需要使用别名来实现您所需要的。但正如您在问题中提到的,如果您要在创建它的同一测试用例中使用别名,则需要使用.then
。因为正如我之前提到的,cypress 执行是异步的,所以如果您使用下面提到的别名,它不会给您预期的输出。
it("test",function (){
cy.get('div').invoke('text').as('value')
//this is wrong
cy.log(this.value)
})
正确的方法是,
it("test",function (){
cy.get('div').invoke('text').as('value').then(() => {
cy.log(this.value)
})
})
要记住的第二件事是,当您在编写钩子时使用别名时,如果您希望使用以前创建的别名,请不要使用箭头函数。所以it("test",() => {})
不会起作用,但是it("test", function(){})
将工作。
根据你的问题,你可以使用这样的别名,
Example:
//Lets create aliases in test01, test02 and test03
before("test01",() => {
cy.get('div').invoke('text').as('var1');
})
it("test02",() => {
cy.get('div').then($el => {
cy.wrap($el.text()).as('val2')
})
})
it("test03",() => {
cy.get('div').invoke('text').as('var3')
})
//let's create use those created aliases in another test
//remember - NO arrow functions to create hooks when using aliases
it("test04", function(){
const variable = this.var3
cy.log(this.var1)
cy.log(this.var2)
cy.log(variable)
//All the above commands will log the expected innerText values
})
希望这就是您正在寻找的。