Javascript cypress中的应用程序重定向,外部不重定向
我正在尝试使用Cypress为这个应用程序编写端到端测试:Javascript cypress中的应用程序重定向,外部不重定向,javascript,redirect,cypress,e2e-testing,e2e,Javascript,Redirect,Cypress,E2e Testing,E2e,我正在尝试使用Cypress为这个应用程序编写端到端测试:https://app.gotphoto.com/admin/auth/login 当我从浏览器中访问上述url时,会显示一个登录表单,正如预期的那样 当我通过Cypress访问上述url时: cypress首先导航到https://app.gotphoto.com/admin/auth/login 之后,我立即被重定向到https://app.gotphoto.com/__/并且登录表单未显示 以下是来自Cypress内部的两个屏幕
https://app.gotphoto.com/admin/auth/login
当我从浏览器中访问上述url时,会显示一个登录表单,正如预期的那样
当我通过Cypress访问上述url时:
- cypress首先导航到
https://app.gotphoto.com/admin/auth/login
- 之后,我立即被重定向到
并且登录表单未显示https://app.gotphoto.com/__/
describe('login screen', () => {
it('logs in', () => {
cy.visit('/admin/auth/login');
});
});
使用cypress.json:
{
"baseUrl": "https://app.gotphoto.com"
}
我用上面的配置创建了一个,所以它很容易复制。重定向到
\uuu/
听起来很熟悉我不久前偶然发现的一个问题。我在Cypress的一篇文章中发现这一评论很有帮助
那么,您是否已经尝试使用配置选项实验资源编写
?在cypress.json
中,它可能如下所示:
{
"baseUrl": "https://app.gotphoto.com"
"experimentalSourceRewriting": true
}
由于它的标签,我建议仔细测试它,但也许它有点帮助。我希望一切顺利!
为什么它在我的浏览器中的运行方式与在Cypress/Cypress的浏览器中的运行方式不同
您的普通浏览器等待XHR请求完成,并呈现由您在其中编写的任何js magic创建的最终输出,但是cy.visit
不应在其中等待这些XHR/AJAX请求。它得到了200的响应并向前移动。如果在cy.visit
旁边添加一个cypress命令,类似于cy.get('h1')
,您会注意到该命令在cy.visit
之后立即运行,之后,XHR请求得到解决
这里的一项工作是使用cy.intercept
,例如(Cypress 6.8.0,Chrome 89):
输出:
它基本上等待您的内部XHR请求完成,并允许您在请求和响应得到解决后处理它们
此问题将帮助您进一步调试:
此外,该代码< > /y//< />代码不允许呈现空白页IMO.
<代码> >https://app.gotphoto.com/__/称为客户端路由,是Cypress中的一个内部配置项 您可以在cypress.json
配置文件中关闭它
{
...
“客户端路由”:“/”
}
这有效地保留了原始url,并允许页面正确加载
cy.visit('https://app.gotphoto.com/admin/auth/login')
cy.get('input#username',{timeout:10000})。键入('admin')//长超时
//等待页面加载
cy.get('input#password')。键入('password'))
cy.intercept('POST','api.getphoto.io/v4/auth/login/user')。作为('user'))
cy.contains('button','Submit')。单击()
cy.wait('@user')。然后(拦截=>{
//不正确的凭证
expect(interception.response.body.detail).to.eq('Login failed!')
})
我不确定更改clientRoute是否有任何不良副作用,如果我找到,我将发布更多信息。。最终这是一个有点黑客的解决方案,因为它在第一次尝试时就失败了;但是,它对任何后续尝试都有效
将以下内容添加到命令.js
// -- Visit multiple domains in one test
Cypress.Commands.add('forceVisit', url => {
cy.window().then(win => {
return win.open(url, '_self');
});
});
describe('login screen', () => {
it('logs in', {
retries: {
runMode: 1,
openMode: 1
}
}, () => {
cy.forceVisit('https://app.gotphoto.com/admin/auth/login');
cy.get('#username').should('exist');
});
});
login.spec.js
// -- Visit multiple domains in one test
Cypress.Commands.add('forceVisit', url => {
cy.window().then(win => {
return win.open(url, '_self');
});
});
describe('login screen', () => {
it('logs in', {
retries: {
runMode: 1,
openMode: 1
}
}, () => {
cy.forceVisit('https://app.gotphoto.com/admin/auth/login');
cy.get('#username').should('exist');
});
});
屏幕截图:
在我的机器上复制了相同的行为,发现了相关问题FYI@evgeniBazhanov感谢您链接该问题,不幸的是我没有找到解决问题的方法。因此,您可以通过cy.get()
加载页面上的元素来实现相同的效果,如果页面加载缓慢,则有适当的超时。不幸的是,没有多少等待可以解决这个问题。我尝试了等待,但没有解决问题。我想他们将不得不使用一些特定于他们正在使用的框架的东西。例如,对于react cypress,确实,cy.wait(@indexHTML”)
正在等待,但不起作用。您可以查看赏金吗?