javascript Cypress -将输入值存储为别名并比较以前的值和当前值

ttcibm8c  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(127)

我想通过别名存储所有输入的值,然后在更改数据后获取当前值,并将以前的别名与当前的别名进行比较。
我的操作:首先,获取所有输入值

for (let i = 0; i < 5; i++) {
        cy.get('.input').eq(i).invoke('val').then(val => cy.log(val)).as(`previous${i}`);
      }

其次,通过在下拉列表中选择示例来更改数据

cy.get('.select').select(1);

第三,获取当前所有输入值

for (let i = 0; i < 5; i++) {
        cy.get('.input').eq(i).invoke('val').then(val => cy.log(val )).as(`current${i}`);
      }

然后我创建了一个比较方法。

for (let i = 0; i < 5; i++) {
        instanceConf.verifyingInputChanging(`@previous${i}`, `@current${i}`);
}

方法本身:

verifyingInputChanging(prevAlias, currenAlias){
    cy.get(prevAlias).then((prev_content) => {
      cy.get(currenAlias).then((cur_content) => {
        expect(cur_content).to.not.eq(prev_content)
      })
    })
  }

不幸的是,它不能比较输入值。如何处理呢?

bogh5gae

bogh5gae1#

此问题来自附加的.then()语句,您在这些语句中对值执行cy.log操作。如果删除这些函数,则测试应按预期运行。

**为什么?**当使用回调简写 * 而没有 * 显式返回时,最终返回的是在.then()中调用的函数,而不是变量val。因此别名“value”为null,因为它是cy.log(val)的生成值。

如果你需要cy.log这个值,你必须返回整个语句,沿着一个单独的then来产生这个值,否则,我建议完全删除.then()

// removing .then()
for (let i = 0; i < 5; i++) {
      cy.wrap(i)
        .as(`prev${i}`);
    }

// returning the `.then()`'d value
for (let i = 0; i < 5; i++) {
      cy.wrap(i)
        .then((val) => {
          return cy.log(val).then(() => {
            return val;
          });
        })
        .as(`previous${i}`);
    }

相关问题