javascript 如何保存变量/文本以便稍后在Cypress测试中使用?

vdzxcuhz  于 2023-01-24  发布在  Java
关注(0)|答案(5)|浏览(163)

Cypress文档(https://docs.cypress.io/guides/core-concepts/variables-and-aliases.html#Elements)对于如何在测试期间使用别名和变量来存储信息非常不清楚。
我尝试将div的文本存储在一个页面上以供以后使用,例如:

// let vpcName;
it('Store current name to use later', () => {
  // save name for later use - doesn't work
  // cy.get('#value').then(elem => {
  //   vpcName = Cypress.$(elem).text;
  // });

  // using alias - also doesn't work
  cy.get('#value')
    .invoke('text')
    .as('vpcName');
});
  
it('Use previous value to return to correct page', () => {
  cy.contains(this.vpcName).click();
});
ergxz8rk

ergxz8rk1#

我刚刚看到这篇文章,它解释了如何以及为什么存储变量,然后以“Cypress方式”使用它:
https://www.stevenhicks.me/blog/2020/02/working-with-variables-in-cypress-tests/
关于它应该如何工作,下面是我的示例,首先,收集消息(消息只显示3秒,然后消失);其次,它使用@符号获取值;最后,我的代码将存储的消息传递给一个空函数,该函数被构造为Assert值Portsmouth包含在消息中。

it('Current Port change', () => {
  cy.get('#viewport').find('div[id=message]').then(message => {
    let wags = message;
    cy.wrap(wags).as('wags')
  });

  cy.get('@wags').then(wags => {
     expect(wags).to.contain("Portsmouth")
  });
});

如果你需要进一步的澄清请告诉我

gev0vcfq

gev0vcfq2#

试试这个:

cy.get('button').then(($btn) => {
  const txt = $btn.text()
  // $btn is the object that the previous command yielded
})

图片来源:https://docs.cypress.io/guides/core-concepts/variables-and-aliases.html#Return-Values

xkrw2x1b

xkrw2x1b3#

我不得不求助于

当我试着去

cnwbcb6i

cnwbcb6i4#

另一种解决方案是将cy.get调用封装在一个函数中,但实际上并不将元素存储到变量中,而是起到一些相同的作用,例如:

const btn = () => cy.get('[data-testid="reset-password-button"]')

btn().should('have.attr', 'disabled')

cy.get('[data-testid="new-password-input"]').type('someNewPW')

btn().should('not.have.attr', 'disabled')

如果可读性是您的主要目标,这可能是一个很好的选择。

hjzp0vay

hjzp0vay5#

这几天我一直在纠结这个问题。如果你想多次使用保存的文本(例如),下面是我的方法。但是我觉得它太长了,我认为它可以优化。在Cypress v11.2.0上测试

cy.xpath("//tbody/tr[2]/td[2]").then(($text) => {
    let txt = $text.text()

    //expect(txt).to.eq('SomeText')
    cy.wrap(txt).as('txt')
  })

  
   cy.get('@txt').then(txt => {
        //expect(txt).to.contain("SomeText")
        cy.xpath("xpath of search field").type(txt)
     })

相关问题