Cypress отправляет несколько запросов и не позволяет войти - PullRequest
1 голос
/ 07 апреля 2020

Я использую Cypress 4.3.0 версию, baseUrl = "https://tenant-demo.somesitedev.net" было установлено в кипарисовом файле. 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

enter image description here

Рис: 2

enter image description here

1 Ответ

0 голосов
/ 18 апреля 2020

Каким-то образом мне удалось найти способ решения проблемы. Поскольку baseUrl имеет некоторое расширение пути /auth/login, всякий раз, когда я запускаю cy.request (), он всегда перенаправляет обратно на страницу входа, даже если учетные данные были правильными. Также в консоли было два запроса.

Таким образом, я отправил еще один cy.request() с методом GET с body параметрами сразу после первого POST cy.request () с параметрами qs , Из заголовков запросов я узнаю, что каждый раз при входе пользователя в систему отправлялся «токен». Если есть другой простой способ, дайте мне знать.

Версия Cypress: 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'
        }
      })
    })
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...