当我使用赛普拉斯时,如何阻止网站自动注销我?

时间:2019-06-13 14:42:27

标签: javascript cypress

我正在使用赛普拉斯(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)
  })
})

2 个答案:

答案 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