Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 存储一个元素';将Cypress中的文本置于链接器方法之外_Javascript_Cypress - Fatal编程技术网

Javascript 存储一个元素';将Cypress中的文本置于链接器方法之外

Javascript 存储一个元素';将Cypress中的文本置于链接器方法之外,javascript,cypress,Javascript,Cypress,如何存储一次div的文本值并在整个cypress测试中使用它 到目前为止,我通过将测试的大部分逻辑嵌套在then方法的调用中实现了这一点,但这似乎并不优雅或理想 cy.get('div').then(($div) => { let storedVar = $div.text() // Bulk of dependent test logic gets nested here }) 我尝试将文本存储在then方法之外,如下所示: let storedVar = '' cy

如何存储一次div的文本值并在整个cypress测试中使用它

到目前为止,我通过将测试的大部分逻辑嵌套在then方法的调用中实现了这一点,但这似乎并不优雅或理想

cy.get('div').then(($div) => {
    let storedVar = $div.text()
    // Bulk of dependent test logic gets nested here
})
我尝试将文本存储在then方法之外,如下所示:

let storedVar = ''

cy.get('div').then($div => {storedVar=$div.text()})
但这不起作用(因为这是一个承诺,storedVar在整个测试过程中保持其初始值)


是否有此嵌套解决方案的替代方案?

您的代码将无法工作,因为您没有在链中执行操作。 Cypress在promise chain中工作,这就是架构。。。。您必须将值传递给chain并相应地执行操作

它的工作原理如下

return cy.get(`.locatorClassName`).then(ele => {
      return ele.text()
    }).then(eleValue => {
      cy.log(eleValue);
    });

您的代码将无法工作,因为您没有在链中执行操作。 Cypress在promise chain中工作,这就是架构。。。。您必须将值传递给chain并相应地执行操作

它的工作原理如下

return cy.get(`.locatorClassName`).then(ele => {
      return ele.text()
    }).then(eleValue => {
      cy.log(eleValue);
    });

在cypress中存储值时,需要使用别名,因为cypress的异步性质
const value=cy.get('div')。text()
不会提供预期的输出

it("test",function (){
cy.get('div').invoke('text').as('value')
//this is wrong
cy.log(this.value)
})

您需要使用别名来实现所需的功能。但是正如您在问题中所提到的,如果要在创建别名的同一测试用例中使用别名,则需要使用
。然后使用
。因为正如我前面提到的,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(){})将起作用

根据你的问题,你可以用这样的别名

例如:

//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
})

希望这就是您想要的。

在cypress中存储值时,您需要使用别名,因为cypress的异步性质
const value=cy.get('div')。text()
不会提供您期望的输出

it("test",function (){
cy.get('div').invoke('text').as('value')
//this is wrong
cy.log(this.value)
})

您需要使用别名来实现所需的功能。但是正如您在问题中所提到的,如果要在创建别名的同一测试用例中使用别名,则需要使用
。然后使用
。因为正如我前面提到的,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(){})将起作用

根据你的问题,你可以用这样的别名

例如:

//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
})

希望这就是您要找的。

您好,接受的答案有效吗?我知道你不能在cypress中返回值。但你需要的是使用别名。(如果你想在下面的测试用例中使用一个值)。@mudithapera答案仍然要求我链接值,所以不是真的。别名听起来更正确,这就是为什么我想知道,因为react不适用于return语句。我将添加另一个答案,因为我无法在此提供清晰的解释嗨,接受的答案有效吗?我知道你不能在cypress中返回值。但你需要的是使用别名。(如果你想在下面的测试用例中使用一个值)。@mudithapera答案仍然要求我链接值,所以不是真的。别名听起来更正确,这就是为什么我想知道,因为react不适用于return语句。我将补充另一个答案,因为我不能在这里提供一个明确的解释