Selenium на Docker: тестирование образа Docker в том же файле `docker-compose`
Сценарий:
- Docker Image, на котором работает мое приложение
localhost:9000
- Изображения Docker с помощью Selenium Webdriver
- Селеновые тесты, с которыми я хочу работать.
Я начал с этого SeleniumHQ / Docker-Селен
Докер Составьте:
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:
Я пробовал разные версии, но безуспешно.
При запуске webdriver
локально все работает.
Этот сценарий невозможен или я что-то пропустил?
1 ответ
Это очень классический вопрос.
поскольку my-app
а также chrome-webdriver
находятся на двух отдельных контейнерах, chrome-webdrive
не может достичь my-app
на своем локальном хосте (127.0.0.1).
Имейте в виду, что одной из функций докера является изоляция работающих сред с концепцией контейнера. То есть, localhost
на вашем хост-компьютере не совпадает с контейнером, и localhost
на контейнере А не совпадает с контейнером на В, у них всех есть свой локальный хост.
Чтобы соединить два контейнера в одной сети, просто используйте их имя контейнера или имя службы в качестве имени хоста.
В твоем случае driver.get("http://my-app:9000/")
,