Я использую 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]