Тестирование Cypress e2e - Как обойти ошибки Cross Origin? - PullRequest
0 голосов
/ 23 мая 2018

Я тестирую веб-приложение, которое интегрирует Gmail, Slack, Dropbox и т. Д. Я пытаюсь написать сквозные тесты с Cypress.io, чтобы проверить, работают ли потоки аутентификации.Cypress запрещает мне выходить за пределы домена моего приложения и выдает ошибку Cross Origin.В документации Cypress сказано, что тестирование не должно включать навигацию за пределами вашего приложения.Но вся цель тестирования моего приложения - убедиться, что эти внешние потоки аутентификации работают.

В документах также сказано, что вы можете добавить "chromeWebSecurity": false в файл cypress.json, чтобы обойти это ограничение.Я сделал это, но все еще получаю ошибки перекрестного происхождения (в этом суть моего вопроса. В идеале я бы обошел это ограничение).

Я попытался использовать Cypress в качестве единого входа.https://github.com/cypress-io/cypress-example-recipes#logging-in---single-sign-on Я не смог заставить его работать, и он содержит гораздо больше кода, чем мне кажется необходимым.

Я прокомментировал эту ветку в github, но ответов пока нет.

Полное сообщение об ошибке:

Error:     CypressError: Cypress detected a cross origin error happened 
on page load:

  > Blocked a frame with origin "https://www.example.com" from 
accessing 
    a cross-origin frame.

    Before the page load, you were bound to the origin policy:
      > https://example.com

A cross origin error happens when your application navigates to a new 
superdomain which does not match the origin policy above.

This typically happens in one of three ways:

1. You clicked an <a> that routed you outside of your application
2. You submitted a form and your server redirected you outside of your 
application
3. You used a javascript redirect to a page outside of your application

Cypress does not allow you to change superdomains within a single test.

You may need to restructure some of your test code to avoid this 
problem. 

Alternatively you can also disable Chrome Web Security which will turn 
off this restriction by setting { chromeWebSecurity: false } in your 
'cypress.json' file.

https://on.cypress.io/cross-origin-violation

1 Ответ

0 голосов
/ 31 июля 2019

В этих распространенных ситуациях есть несколько простых обходных путей: не нажимайте на ссылки <a> в своих тестах, которые выходят за пределы вашего приложения.Вероятно, это не стоит проверять в любом случае.Вы должны спросить себя: какой смысл нажимать и переходить в другое приложение?Вероятно, все, что вас волнует, это то, что атрибут href соответствует тому, что вы ожидаете.Так что сделайте утверждение об этом.Вы можете увидеть больше стратегий тестирования якорных ссылок в нашем примере рецепта «Обработка вкладок и ссылок».

Вы тестируете страницу, которая использует единый вход (SSO).В этом случае ваш веб-сервер, вероятно, перенаправляет вас между супердоменами, поэтому вы получаете это сообщение об ошибке.Вероятно, вы можете обойти эту проблему перенаправления, используя cy.request(), чтобы самостоятельно обрабатывать сеанс самостоятельно.

Если вы застряли и не можете обойти эти проблемы, вы можете просто установить это в файле cypress.json.,Но прежде чем сделать это, вы должны по-настоящему понять и прочитать о причинах здесь.

// cypress.json

{
  "chromeWebSecurity": false
}
...