为了账号安全,请及时绑定邮箱和手机立即绑定

赛普拉斯发送多个请求并且不允许登录

赛普拉斯发送多个请求并且不允许登录

catspeake 2022-06-16 10:28:36
我正在使用Cypress 4.3.0版本,baseUrl = " https://tenant-demo.somesitedev.net " 已在 cypress.json 文件中设置。当我发送cy.request()命令时,它正在发送多个请求(请参见图:1)。此外,当我观察访问命令时,我可以看到原始 URL、已解析 URL 和重定向。在这种情况下,我如何使用cy.request()命令登录到站点。before(()=>{    cy.visit('/').then(()=>{        cy.get('input[type="hidden"]').invoke('val').then((val)=>{                const token = val;                cy.login(token);        })      })    }) Cypress.Commands.add('login', (token) => {    const username= 'test1.user';    const password= 'somepassword';    const accessToken = localStorage.getItem('tokens');    const cookieValue = document.cookie.split(';');    const configCat = localStorage.getItem('ConfigCat_');  cy.request({      method: 'GET',      url: '/dashboard',      failOnStatusCode: false,      form: true,      body:{        _token: token,        username,        password      },      headers: {        'accept': 'text/html',        'content-type': 'application/x-www-form-urlencoded',        'authorization': `bearer ${accessToken}`,        'ConfigCat_': `${configCat}`,        'cookie': `${cookieValue}`       }     }).then((res)=>{      visitDashboard();     })  })  const visitDashboard = () => {    cy.visit('dashboard')  }图。1图:2
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

不知何故,我设法找到了解决问题的方法。由于baseUrl有一些路径扩展名/auth/login,每当我触发 cy.request() 时,即使凭据正确,它总是会重定向回登录页面。控制台中还有两个请求。


所以我所做的方法是在第一个带有参数的 POST cy.request() 之后立即发送另一个cy.request()带有参数的 GET 方法。从请求标头中,我发现每次用户登录时都会提交一个“令牌”。如果有另一种简单的方法让我知道。bodyqs


赛普拉斯版本:4.4.0


在里面beforeEach(),获取 'token' 值;


 beforeEach(() => {

    cy.visit('/');

    cy.loadTokens();

    cy.get('input[name="_token"]').invoke('val').then((val)=>{

        const tokenValue = val;

        cy.loginRequest(tokenValue);

      })

    })

以下是commands.js文件:


Cypress.Commands.add('loginRequest', function (tokenValue) {

     return cy.request({

      method: 'POST',

      url: Cypress.config('baseUrl'),

      followRedirect: true,

      headers: {

        'content-type': 'text/html; charset=UTF-8'

      },

      qs:{

        _token: tokenValue,

        username: 'your_username',

        password:'your_password'

      }

    }).then(()=>{

      return cy.request({

        method: 'GET',

        url: 'https://tenant-demo.somesitedev.net/dashboard',

        followRedirect: false,

        headers: {

          'content-type': 'text/html; charset=UTF-8'

        },

        body:{

          _token: tokenValue,

          username: 'your_username',

          password:'your_password'

        }

      })

    })

  });


查看完整回答
反对 回复 2022-06-16
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信