我正在使用赛普拉斯(cypress)在我公司的网站上进行自动化测试,并且登录后,单击任何交互式元素都会立即注销我。但是,这仅在我通过赛普拉斯运行时才进行。手动单击仍然有效。我该怎么做才能解决此问题?
这是使用javascript构建的网站。
我希望该网站不会注销我。
describe('signing in', function() {
it('Visits the safe and reliable sign-in page', function() {
cy.visit('https://testing.safeandreliable.care/sign-in')
cy.get('[id="at-field-username_and_email"]').type('bcramer@safeandreliablecare.com')
cy.get('[id="at-field-password"]').type('******')
cy.contains('Sign In').click()
})
it('signs into the default entity', function(){
cy.get('[id="help-text-board"]').click({force:true})
cy.wait(9000)
})
})
答案 0 :(得分:0)
您应该知道,赛普拉斯每次启动新的it()
时都会清除浏览器的状态。因此,在第一个it()
中所做的事情现在不在第二个it()
中。在您的情况下,登录名是第一个,第二个是该应用程序不再登录。为确保赛普拉斯保持登录状态,您应该将登录步骤移至before()
或beforeEach()
(取决于您要对每个描述或每个描述进行一次登录。
在发布信息之后,您似乎希望它登录一次并保持登录状态,因此before()
会为您完成这项工作。您的代码如下所示:
describe('signing in', function() {
before('Logijn to the application', function() {
cy.visit('https://testing.safeandreliable.care/sign-in')
cy.get('[id="at-field-username_and_email"]').type('bcramer@safeandreliablecare.com')
cy.get('[id="at-field-password"]').type('******')
cy.contains('Sign In').click()
})
it('signs into the default entity', function(){
cy.get('[id="help-text-board"]').click({force:true})
cy.wait(9000)
})
it('next test', function () {
// do other test but still logged in
})
})
答案 1 :(得分:0)
您需要添加以下内容(以及https://stackoverflow.com/a/56593040/8928727中建议的其他更改):
beforeEach(() => {
Cypress.Cookies.preserveOnce('whatever session id')
})
如果缺少上述内容,您仍将在两次测试之间删除cookie,在这种情况下,这不是您想要的。在此处阅读更多信息:https://docs.cypress.io/api/cypress-api/cookies.html#Preserve-Once