首页 > 解决方案 > 赛普拉斯:将值存储在变量中

问题描述

我想将 td 值存储在变量中。为什么这段代码不起作用?

let storedValue;
cy.get('tbody>tr:nth-child(1)>td:nth-child(3)').invoke('text').then(text => 
{
  storedValue = text;
})
cy.contains(storedValue).should('exist');

它返回“cy.contains() 只能接受字符串、数字或正则表达式”

标签: cypress

解决方案


更好的方法是使用aliases.

cy.get('tbody>tr:nth-child(1)>td:nth-child(3)').invoke('text').as('storedValue')

cy.get('@storedValue').then((storedValue) => {
  //Access storedValue here
  cy.log(storedValue) //prints value
})

或者如果你只是想检查元素是否存在,你可以直接这样做:

cy.get('tbody>tr:nth-child(1)>td:nth-child(3)').should('exist')

至于为什么你的代码不工作的问题,这是因为 javascript 是异步工作的,所以不是首先获取文本的代码,而是首先执行 contains 语句,它失败的原因是其中storedValue没有任何内容,简而言之,就是undefined。要修复,您必须添加then()以便代码按照我们希望它运行的顺序运行。

let storedValue
cy.get('tbody>tr:nth-child(1)>td:nth-child(3)')
  .invoke('text')
  .then((text) => {
    storedValue = text
  })
  .then(() => {
    cy.contains(storedValue).should('exist')
  })

推荐阅读