Ошибка аутентификации в тестах e2e с использованием cypress: chrome -error: // chromewebdata - PullRequest
0 голосов
/ 16 апреля 2020

Я использую Cypress для написания тестов E2E для моего пользовательского интерфейса (обратите внимание, что это отчет PowerBI, следовательно, это своего рода особый случай). Когда я тестирую с опубликованным отчетом c, он работает нормально. Но когда это личный отчет PBI, у меня возникают проблемы с входом в систему. После некоторых исследований я нашел этот подход многообещающим для Azure аутентификации на основе AD и добавил эту функцию входа в мои команды. js file:

Cypress.Commands.add('login', () => { 
    cy.request({
        method: 'POST',
        url: 'https://login.microsoftonline.com/{TENANT}/oauth2/token',
        form: true,
        body: {
            grant_type: 'client_credentials',
            client_id: CLIENT_ID,
            client_secret: CLIENT_SECRET,
            // resource: RESOURCE
        },
        header: {
            'Content-Type': 'multipart/form-data'
        }
    }).then((responseData) => {
        if (responseData.status === 200) {
            window.sessionStorage.setItem("adal.idtoken", responseData.body.access_token);
            window.sessionStorage.setItem("adal.token.keys", CLIENT_ID + "|")
            window.sessionStorage.setItem(`adal.expiration.key${CLIENT_ID}`, responseData.body.expires_on)
            window.sessionStorage.setItem(`adal.access.token.key${CLIENT_ID}`, responseData.body.access_token)
        } else {
            console.log("error retrieving token")
        }
    })
})

Обратите внимание, что идентификатор и секретный номер клиента верны и иметь разрешение на доступ к отчету powerbi. Я также проверил сгенерированный токен и переменные sessionStorage, и, кажется, все они назначены правильно. Теперь в моем тесте:

describe("E2E Tests", () => {
    beforeEach(() => {
        cy.login();
    })
    it("Sample Test 1", () => {
        cy.visit("https://powerbi-report-url.com");
        //...
    });
})

И я вижу в Cypress Test Runner, что, несмотря на то, что вход в систему был вызван beforeEach, при посещении отчета Powerbi он все еще перенаправляет на https://login.microsoftonline.com URL-адрес с другим идентификатором клиента в качестве параметра запроса, и поскольку супердомены отчета powerbi и перенаправленных URL-адресов отличаются, это дает ошибку chrome-error://chromewebdata (я думаю, что причина). Отсюда интересно, как войти на сайт в кипарисовых тестах, поддерживаемых azure ad auth.

Кроме того, может быть не связано, но увидеть еще одну ошибку в консоли:

Refused to display 'https://powerbi-report-url.com' in a frame because it set 'X-Frame-Options' to 'deny'.

Изменить 1: Переключение на Edge не приводит к ошибке chrome веб-данных, но все равно cy.visit к URL-адресу истекает и выдает ошибку HTTP 431 (слишком длинный заголовок запроса) и не может аутентифицироваться.

Редактировать 2 (Подробнее об ошибке аутентификации): при создании токена с использованием учетных данных клиента я получаю токен и вижу, что он хранится в хранилище сеанса, однако кипарисовые тесты не выбирают тот же токен для авторизации посещения PowerBI отчет. Таким образом, в принципе даже считая, что повар ie существует для аутентификации запроса, запрос на посещение Power BI все еще перенаправляет на login.microsoftonline.com/common/oauth2/authorize?client_id= enja идентификатор клиента, отличный от того, который я использую в вышеуказанный вызов POST}

Принимая во внимание, что при использовании имени пользователя / пароля; получая эту ошибку: «ошибка»: «взаимодействие_required», «сообщение об ошибке»: «AADSTS50079: из-за изменения конфигурации, сделанного вашим администратором, или из-за того, что вы переехали в новое место, вы должны зарегистрироваться в многофакторной аутентификации для доступа» коды ошибок ": [50079]

1 Ответ

1 голос
/ 17 апреля 2020

В данный момент (17 апреля-20) это может быть связано с открытой проблемой с командой Cypress: https://github.com/cypress-io/cypress/issues/4220

Для меня, в частности, я имел обыкновение иметь один супер-домен, имеющий эту ошибку с предыдущей версией 4.3.0, но теперь с 4.4.0, я получаю больше доменов, имеющих ту же проблему.

Текущий обходной путь: откат к предыдущей версии и запуск через Edge (который в любом случае основан на Chromium).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...