Драйвер Selenium Firefox заставляет https - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть функциональное приложение, работающее в докере через порт 3000.У меня есть тесты селена, которые работают, когда я устанавливаю свой хост на http://localhost:3000.Я создал контейнер для запуска тестов на селен, и он не работает со следующей ошибкой:

WebDriverError:Reachederrorpage:about:neterror?e=nssFailure2&u=https://app:3000/&c=UTF-8&f=regular&d=An error occurred during a connection to app:3000.

SSL received a record that exceeded the maximum permissible length.

Error code: <a id="errorCode" title="SSL_ERROR_RX_RECORD_TOO_LONG">SSL_ERROR_RX_RECORD_TOO_LONG</a>

Фрагмент моего docker-compose.yml

app:
    build:
        context: .
        dockerfile: Dockerfile.dev
    volumes:
        - ./:/usr/src/app/
    ports:
        - "3000:3000"
        - "3001:3001"
    networks:
        tests:

selenium-tester:
    build:
        context: .
        dockerfile: Dockerfile.selenium.tests
    volumes:
        - ./:/usr/src/app/
        - /dev/shm:/dev/shm
    depends_on:
        - app
    networks:
        tests:

Я заменил хост на http://app:3000, ноFirefox, кажется, хочет перенаправить этот http на https (который не работает).И, наконец, я создаю свой драйвер следующим образом:

const ffoptions = new firefox.Options()
  .headless()
  .setPreference('browser.urlbar.autoFill', 'false'); // test to disable auto https redirect… not working obviously
const driver = Builder()
      .setFirefoxOptions(ffoptions)
      .forBrowser('firefox')
      .build();

Когда я вручную связываюсь с http://app:3000, используя curl внутри контейнера с тестером селена, он работает как положено, я получаю свою домашнюю страницу.

У меня не хватает идей сейчас, и даже разложение моей проблемы, чтобы написать этот вопрос, не принесло мне новых

Ответы [ 2 ]

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

У меня была точно такая же проблема - не удалось успешно выполнить запрос по HTTP к приложению из управляемых Selenium браузеров (Chrome или Firefox) в другом контейнере Docker в той же сети.CURL из этого контейнера, хотя работал нормально!Подключитесь по HTTP, но, похоже, что-то пытается заставить HTTPS.Идентичная ситуация вплоть до имени контейнера "app".

Ответ ... это имя контейнера!

"app" - это домен верхнего уровня в HSTSпредварительно загруженный список - то есть браузеры принудительно получат доступ через HTTPS.

Исправлено использование имени контейнера, которого нет в предварительно загруженных списках HSTS.

HSTS - подробнее

0 голосов
/ 29 декабря 2018

Как вы упомянули , вручную связываясь с http://app:3000, используя curl внутри контейнера с тестером селена, он работает, как и ожидалось

Это сообщение об ошибке ...

WebDriverError:Reachederrorpage:about:neterror?e=nssFailure2&u=https://app:3000/&c=UTF-8&f=regular&d=An error occurred during a connection to app:3000.
SSL received a record that exceeded the maximum permissible length.
Error code: <a id="errorCode" title="SSL_ERROR_RX_RECORD_TOO_LONG">SSL_ERROR_RX_RECORD_TOO_LONG</a>

... подразумевает, что слой SSL в curl или одна из его зависимостей кажется нарушенной.

@ RussellFulton в этом обсуждении упомянул:

Thisпохоже, что вы видите результат Firefox , когда сервер не настроен должным образом для SSL.Возможно, Chrome только что выдал бы общую ошибку ssl failed.

Это может произойти, когда браузер отправляет SSL рукопожатие когда сервер ожидает HTTP-запрос.Сервер отвечает 400 кодом и сообщением об ошибке , которое намного больше, чем рукопожатие , которое ожидает браузер.Следовательно, вы видите сообщение.


Причины и решение

  • Когда подверженный ошибкам код пытается перенаправить на HTTPS через порт 80 (порт 3000 в вашем случае).
    • Решение. При удалении порта 80 (порт 3000 в вашем случае) из URL-адреса перенаправление работает.

HTTPS по умолчанию работает через порт 443 .

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