Selenium на Docker: тестирование образа Docker в том же файле `docker-compose` - PullRequest
0 голосов
/ 21 января 2019

Сценарий:

  • Изображение Docker, которое запускает мое приложение на localhost:9000
  • Изображения Docker с Selenium Webdriver
  • Тесты Selenium, с которыми я хочу работать.

Я начал с этого SeleniumHQ / docker-selenium

Докер Состав:

version: "3.1"
services:    

  my-app:
    image: pame/play-binding-form-server
    networks:
      - mynet
    ...
    ports:
      - "9000:9000"

  chrome-webdriver:
    image: selenium/standalone-chrome:3.141.59-europium
    networks:
      - mynet
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "4444:4444"
    depends_on:
      - my-app

networks:
  mynet:

docker ps:

CONTAINER ID        IMAGE                                          COMMAND                  CREATED             STATUS              PORTS                              NAMES
53ac65c2babd        selenium/standalone-chrome:3.141.59-europium   "/opt/bin/entry_poin…"   13 minutes ago      Up 13 minutes       0.0.0.0:4444->4444/tcp             e2e_chrome-webdriver_1
fc0ca2af3148        pame/play-binding-form-server                  "/pme123/conf/docker…"   17 minutes ago      Up 17 minutes       0.0.0.0:9000->9000/tcp, 9443/tcp   pme123-forms
d

Мой тест выглядит так:

  import org.openqa.selenium.remote.DesiredCapabilities
  import org.openqa.selenium.remote.RemoteWebDriver

  val driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"),
    DesiredCapabilities.chrome())
  driver.get("http://localhost:9000/")

Возвращает HTML-страницу:

This site can’t be reached

Я пробовал разныеверсии, но безуспешно.

При локальном запуске webdriver все работает.

Этот сценарий невозможен или я что-то пропустил?

1 Ответ

0 голосов
/ 21 января 2019

Это очень классический вопрос.

Поскольку my-app и chrome-webdriver находятся в двух отдельных контейнерах, chrome-webdrive не может достичь my-app в его localhost (127.0.0.1).

Имейте в виду, что одной из функций докера является изоляция работающих сред с концепцией контейнера.То есть localhost на вашем хост-компьютере не совпадает с контейнером, а localhost на контейнере A не совпадает с контейнером B, все они имеют свой собственный localhost.

Чтобы соединить два контейнера в одной сети , просто используйте их имя контейнера или имя службы в качестве имени хоста.

В вашем случае driver.get("http://my-app:9000/").

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