代码之家  ›  专栏  ›  技术社区  ›  pme

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

  •  1
  • pme  · 技术社区  · 7 年前

    方案:

    • localhost:9000上运行我的应用程序的Docker映像
    • 带Selenium WebDriver的Docker图像
    • 我想参加的硒测试。.

    我从这里开始 seleniumhq/docker selenium

    Docker撰写:

    版本:“3.1”
    服务:
    
    我的应用程序:
    图:PAME/Play绑定表单服务器
    网络:
    - MyNET]
    …
    端口:
    -“9000:9000”
    
    Chrome Web驱动程序:
    图片:硒/独立铬:3.141.59-铕
    网络:
    - MyNET]
    卷:
    -/dev/shm:/dev/shm
    端口:
    -“44 44∶44 44”
    依赖性:
    -我的应用程序
    
    网络:
    MyNET:
    < /代码> 
    
    

    docker ps:。

    container id image command created status ports names
    53AC65c2babd Selenium/Standalone Chrome:3.141.59-europium“/opt/bin/entry__ 13分钟前上升13分钟0.0.0.0:4444->4444/tcp e2e_chrome-webdriver_1
    fc0ca2af3148 pame/play-binding-form-server“/pme123/conf/docker_Ω”17分钟前上升17分钟0.0.0.0:9000->9000/tcp,9443/tcp pme123表单
    D
    < /代码> 
    
    

    我的测试结果如下:

    import org.openqa.selenium.remote.desiredCapabilities
    导入org.openqa.selenium.remote.remotewebdriver
    
    val driver=new remotewebdriver(新URL(“http://localhost:4444/wd/hub”),
    DesiredCapabilities.chrome())
    driver.get(“http://localhost:9000/”)
    < /代码> 
    
    

    这将返回一个HTML页:

    我尝试了不同的版本,但没有成功。

    当运行webdriverlocally everything works.

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

  • 我想做的硒测试。
  • 我从这个开始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 回复  |  直到 7 年前
        1
  •  1
  •   Siyu Zeeshan Akhter    7 年前

    这是一个非常经典的问题。

    自从 my-app chrome-webdriver 在两个 分离 容器, chrome-webdrive 够不着 我的应用程序 它的 本地主机(127.0.0.1)。

    请记住,Docker的一个功能是用容器的概念隔离运行环境。也就是说, localhost 在主机上与容器上的不同,并且 本地服务器 容器A上的和容器B上的不同,它们都有自己的本地主机。

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

    以你为例 driver.get("http://my-app:9000/") .