场景:我正在从本地主机上提供的应用程序中单击登录按钮。它通过cy.origin将我重定向到azure sso登录身份验证执行良好。用户成功登录到应用程序。但它将我重定向到一个空白页面,因此其余的it块都会失败。下面所附的代码运行良好,但一旦第一个IT块通过,在执行第二个IT块时,页面将设置为about:black,因此测试用例失败。问题:应该有什么解决方法,以便我可以继续对测试中的应用程序进行测试?
第二个描述获取失败的
Cypress.Commands.add('authenticate', () =>{
cy.visit('http://localhost:8080/')
cy.get('input[value="***"]').click();
cy.origin(`https://login.microsoftonline.com/`, () => {
cy.wait(3000)
cy.get('#i0116').type('username')
cy.get('#idSIButton9').click()
cy.wait(3000)
cy.get('#i0118').type('password')
cy.wait(2000)
cy.get('#idSIButton9').click()
cy.wait(2000)
cy.get('#idSIButton9').click();
})
cy.wait(6000)
cy.url().should('contain', 'Welcome')
})
根据文档,该行为是由设计的
看看cy.origin((
cy.origin((命令目前是实验性的,可以通过在Cypress配置中将experialSessionAndOrigin标志设置为true来启用。
启用此标志会执行以下操作:
它在每次测试的开始时添加了以下新行为(这将是Cypress未来主要版本中的默认行为(:
- 页面被清除(通过将其设置为about:blank(
如果通过";第二个描述失败了";你的意思是第二次测试没有访问欢迎页面,那么在第二次考试开始时明确访问cy.visit('http://localhost:8080/')
。
这是使用cy.origin.时推荐的方法
顺便说一句,您应该在配置中将http://localhost:8080/
设置为baseUrl,并使用来自Cypress最佳实践的cy.visit('/')
。
Cypress.Commands.add("session_thing", (email, password) => {
cy.session([email, password], () => {
cy.visit('http://localhost:8080/AdminWebapp/Welcome.html')
cy.get('input[value="Log In With Office 365"]').click();
cy.origin(
`https://login.microsoftonline.com/`,
{ args: [email, password] },
([email, password]) => {
cy.wait(3000)
cy.get('#i0116').type(email)
cy.get('#idSIButton9').click()
cy.wait(3000)
cy.get('#i0118').type(password)
cy.wait(2000)
cy.get('#idSIButton9').click()
cy.wait(2000)
cy.get('#idSIButton9').click();
}
);
cy.url().should('contain', 'Welcome')
});});
使用上述代码实现了所需的行为。它在beforeEach钩子中恢复会话。我只是在每个IT块中调用cy.visit('/'(,并执行所需的操作,这与会话功能有点非常快。