Scala Selenium on Docker:在同一个“Docker compose”文件中测试Docker映像

Scala Selenium on Docker:在同一个“Docker compose”文件中测试Docker映像,scala,selenium,docker-compose,selenium-docker,Scala,Selenium,Docker Compose,Selenium Docker,情景: 在localhost:9000上运行我的应用程序的Docker映像 带有Selenium Webdriver的Docker图像 我想要运行的Selenium测试 我是从这个开始的 Docker Compose: version: "3.1" services: my-app: image: pame/play-binding-form-server networks: - mynet ... ports: - "9

情景:

  • localhost:9000上运行我的应用程序的Docker映像
  • 带有Selenium Webdriver的Docker图像
  • 我想要运行的Selenium测试
我是从这个开始的

Docker Compose:

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
时,一切正常


这种情况是不可能的还是我错过了什么

这是一个非常经典的问题

由于
myapp
chromewebdriver
分别位于两个容器上,因此
chromewebdrive
无法访问itslocalhost(127.0.0.1)上的
myapp

请记住,docker的功能之一是使用容器概念隔离运行环境。也就是说,主机上的
localhost
与容器上的不一样,容器a上的
localhost
与容器B上的不一样,它们都有自己的localhost

要连接同一网络中的两个容器,只需使用它们的容器名或服务名作为主机名


在您的情况下,
driver.get(“http://my-app:9000/)

@Siyu-谢谢你的帮助!如果你创造一个答案,我可以接受。我仍然有点难以理解为什么
http://localhost:4444/wd/hub
然后工作-它不需要主机名,比如
http://chrome-webdriver:4444/wd/hub