Javascript Cypress-存储稍后访问的值
我有一个测试,我需要获取链接的href,并将其存储到测试中的稍后访问它 如果我编写两个不同的测试,效果很好:一个是获取href,另一个是访问href。但是如果我在同一个测试中都做了,它就不起作用了,为什么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
//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中