Javascript Cypress-存储稍后访问的值

Javascript Cypress-存储稍后访问的值,javascript,testing,cypress,Javascript,Testing,Cypress,我有一个测试,我需要获取链接的href,并将其存储到测试中的稍后访问它 如果我编写两个不同的测试,效果很好:一个是获取href,另一个是访问href。但是如果我在同一个测试中都做了,它就不起作用了,为什么 //commands.js add('getInvitationLink',()=>{ cy.get('a.invitation-link') .should('have.attr','href') 。然后((href)=>{ assert.isOk(href,“找到邀请”) 返回cy.wra

我有一个测试,我需要获取链接的href,并将其存储到测试中的稍后访问它

如果我编写两个不同的测试,效果很好:一个是获取href,另一个是访问href。但是如果我在同一个测试中都做了,它就不起作用了,为什么

//commands.js
add('getInvitationLink',()=>{
cy.get('a.invitation-link')
.should('have.attr','href')
。然后((href)=>{
assert.isOk(href,“找到邀请”)
返回cy.wrap(href)
})
})
//invitation.spec.js-正在工作
让邀请链接
它('获取邀请链接',()=>{
cy.visit(“/”)
cy.getInvitationLink()。然后(href=>{
邀请链接=href
})
//在页面上声明其他内容。。。
})
它('访问邀请链接',()=>{
cy.visit(invitationLink)//它有效!
})
//invitation.spec.js-不工作
让邀请链接
它('获取邀请链接并访问它',()=>{
cy.visit(“/”)
cy.getInvitationLink()。然后(href=>{
邀请链接=href
})
//在页面上声明其他内容。。。
cy.visit(invitationLink)//它不工作!invitationLink未定义
})

邀请链接
是在承诺的上下文中定义的。尝试在
中移动
cy.visit
命令。然后

// invitation.spec.js - not working

let invitationLink;

it('get the invitation link and access it', () => {
  cy.visit('/');


  cy.getInvitationLink().then(href => {
    invitationLink = href;
    cy.visit(invitationLink);
    // assert other stuff on the page...

  });
});

如果它只是为了存储和使用值,那么创建一个如下的属性

const asyncLocalStorage = {
    setItem: async function (key, value) {

        return localStorage.setItem(key, value);
    },
    getItem: async function (key) {

        return localStorage.getItem(key);
    }
};
然后将该值设置为

asyncLocalStorage.setItem('storedName', name)
asyncLocalStorage.getItem('storedName').then((storedName) => {})
并得到如下值:

asyncLocalStorage.setItem('storedName', name)
asyncLocalStorage.getItem('storedName').then((storedName) => {})
或者只是

  const name = asyncLocalStorage.getItem('storedName')

这没有道理@colefner。如果我访问邀请链接,那么页面是不同的,我不能在页面上声明其他内容。顺序必须是:获取链接,做其他事情,访问链接。好的。然后在访问新页面之前,在当前页面上进行断言。由于Cypress执行命令的方式(异步),尚未定义invitationLink。您正在异步执行命令,然后同步尝试访问结果。这个链接可以更好地解释它:谢谢@colefner。在访问链接之前断言所有内容是我已经在做的事情。不同的是我需要在里面做。然后()。罗杰:对于访问变量这样简单的事情来说,使用本地存储似乎太难了。除此之外,我还有同样的问题@colefner的答案是目前为止最好的。如果您想要一个简单的解决方案,您可以将变量存储在cookie中