Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript cypress中的应用程序重定向,外部不重定向_Javascript_Redirect_Cypress_E2e Testing_E2e - Fatal编程技术网

Javascript 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内部的两个屏幕

我正在尝试使用Cypress为这个应用程序编写端到端测试:
https://app.gotphoto.com/admin/auth/login

当我从浏览器中访问上述url时,会显示一个登录表单,正如预期的那样

当我通过Cypress访问上述url时:

  • cypress首先导航到
    https://app.gotphoto.com/admin/auth/login
  • 之后,我立即被重定向到
    https://app.gotphoto.com/__/
    并且登录表单未显示
以下是来自Cypress内部的两个屏幕截图:

我的问题是:为什么它在我的浏览器中运行和在Cypress/Cypress的浏览器中运行有区别

我使用的浏览器是Chrome89,无论是在使用Cypress还是不使用Cypress时

我正在运行的整个测试如下所示:

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”)
正在等待,但不起作用。您可以查看赏金吗?