docker selenium/standalone-chrome无法连接到docker Web服务器 [英] docker selenium/standalone-chrome unable to connect to docker web server

查看:679
本文介绍了docker selenium/standalone-chrome无法连接到docker Web服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用代码接收对使用docker容器开发的php网站运行测试. 我在Web容器中创建了一个测试文件夹,并在其中放置了codecept.phar.

I am trying to use codeception to run tests for a php web site which was developed using docker containers. I created a test folder in the web container and put there codecept.phar.

这是项目的设置:

  • docker-compose.yml:

  • docker-compose.yml:

version: '3'
  services:
    db:
      image: mariadb
      restart: always
      volumes:
        - ./db:/var/lib/mysql
      ports:
        - '3306:3306'
      environment:
        MYSQL_ROOT_PASSWORD: root
    web:
      build: .
      restart: always
      tty: true
      volumes:
        - ./src:/var/www
        - ./build/php.ini:/usr/local/etc/php/php.ini
      ports:
        - '80:80'
      depends_on:
        - db
    chrome:
      image: selenium/standalone-chrome
      restart: always
      ports:
        - '4444:4444'
        - '5900:5900'
      depends_on:
        - web

  • acceptance.suite.yml

  • acceptance.suite.yml

    actor: AcceptanceTester
    modules:
      enabled:
        - WebDriver:
            url: web
            host: chrome
            browser: chrome
            wait: 15
            window_size: false
        - \Helper\Acceptance
    

  • 我用以下内容启动容器:

    I start the containers with:

    docker-compose up
    

    然后将shell附加到Web容器并使用以下命令运行测试:

    And then I attach shell to the web container and run the tests with:

    php codecept.phar build && php codecept.phar run --steps
    

    我正在运行一个简单的测试,该测试基本上试图检查元素是否存在并拍摄屏幕截图: -test1.php:

    I am running a simple test that basically tries to check an element exists and takes a screenshot: - test1.php:

    $I = new AcceptanceTester($scenario);
    $I->amOnUrl('http://127.0.0.1');
    $I->makeScreenshot();
    $I->waitForElement(".modal");
    

    但是测试无法正常运行,因为Chrome容器无法连接到Web容器.屏幕截图显示了一个页面,显示:

    But the test is not running properly because chrome container cannot connect to web container. The screenshot shows a page that says:

    This site can't be reached
    127.0.0.1 refused to connect
    

    这是附件中运行代码接收的shell中显示的错误:

    And this is the error shown in the attached shell running codeception:

    [Facebook\WebDriver\Exception\NoSuchElementException] no such element: Unable to locate element: {"method":"css selector","selector":".modal"}
    (Session info: chrome=68.0.3440.84)
    (Driver info: chromedriver=2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706),platform=Linux 4.9.0-7-amd64 x86_64)
    

    尽管我能够连接到 http://127.0.0.1:4444/wd/hub

    这是我从运行"docker-compose up"的外壳程序获得的输出:

    This is the output I get from the shell running the "docker-compose up":

    chrome_1 | INFO [GridLauncherV3.launch] - Selenium build info: version: '3.14.0', revision: 'aacccce0'
    chrome_1 | INFO [GridLauncherV3$1.launch] - Launching a standalone Selenium Server on port 4444
    chrome_1 | INFO::main: Logging initialized @286ms to org.seleniumhq.jetty9.util.log.StdErrLog
    chrome_1 | INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444
    chrome_1 | INFO [ActiveSessionFactory.apply] - Capabilities are: {"browserName": "chrome"}
    chrome_1 | INFO [ActiveSessionFactory.lambda$apply$11] - Matched factory org.openqa.selenium.remote.server.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService)
    chrome_1 | Starting ChromeDriver 2[.14513.5517089780809 .(328f61]e[dS5EfV9E3R4E3]c:1 3bfi7n3d1(4)4 5r3e8tfu1r5nce0d0 ba3n7 0eerdrao6r7,0 6e) onr rpnoor=t9 91:7 2C9a4n
    chrome_1 | Onnloyt  laoscsailg nc ornenqeucetsitoends  aadrder easlsl o(w9e9d).
    chrome_1 | INFO [ProtocolHandshake.createSession] - Detected dialect: OSS
    chrome_1 | INFO [RemoteSession$Factory.lambda$performHandshake$0] - Started new session ed60fb03c497f98a7e23bdede05c4bb9 (org.openqa.selenium.chrome.ChromeDriverService)
    chrome_1 | INFO [ActiveSessions$1.onStop] - Removing session ed60fb03c497f98a7e23bdede05c4bb9 (org.openqa.selenium.chrome.ChromeDriverService)
    chrome_1 | INFO [ActiveSessionFactory.apply] - Capabilities are: {"browserName": "chrome"}
    chrome_1 | INFO [ActiveSessionFactory.lambda$apply$11] - Matched factory org.openqa.selenium.remote.server.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService)
    chrome_1 | Starting ChromeDriver 2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706) on port 17381
    chrome_1 | Only local connections are allowed.
    chrome_1 | [1535110012.491][SEVERE]: bind() returned an error, errno=99: Cannot assign requested address (99)
    chrome_1 | INFO [ProtocolHandshake.createSession] - Detected dialect: OSS
    chrome_1 | INFO [RemoteSession$Factory.lambda$performHandshake$0] - Started new session 3c49c360624e02460995193c50f43bd3 (org.openqa.selenium.chrome.ChromeDriverService)
    chrome_1 | INFO [ActiveSessions$1.onStop] - Removing session 3c49c360624e02460995193c50f43bd3 (org.openqa.selenium.chrome.ChromeDriverService)
    

    我认为为docker-compose容器建立网络应该可以解决问题. 我尝试遵循Docker文档(网络配置参考 )将网络设置为主机",但由于版本3中不允许使用该名称,因此它似乎已过时.

    I think that set up a network for the docker-compose containers should solve the problem. I tried to follow the docker documentation (Network configuration reference) to set the network as "host" , but it seems to be outdated, as names are not allowed in version 3.

    还尝试设置从chrome到Web的链接,并在没有撰写内容的情况下运行chrome(docker run --net = host selenium/standalone-chrome),但这没有任何改变.

    Also tried to set a link from chrome to web, and run chrome without compose (docker run --net=host selenium/standalone-chrome) but that made no change.

    您知道一种使这项工作有效的方法吗? 感谢您的帮助!

    Would you know a way to make this work? Thanks for your help!

    推荐答案

    您是否在docker-compose中尝试过network_mode: "host"?

    Have you tried network_mode: "host" in your docker-compose?

    这篇关于docker selenium/standalone-chrome无法连接到docker Web服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆