社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Docker Selenium/Standalone Chrome无法连接到Docker Web服务器

nanaoa • 4 年前 • 451 次点击  

我正在尝试使用codeception为使用Docker容器开发的PHP网站运行测试。 我在Web容器中创建了一个测试文件夹,并将codecept.phar放在那里。

这是项目的设置:

  • 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
    
  • 验收.suite.yml

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

我用以下方式开始容器:

docker-compose up

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

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

我正在运行一个简单的测试,它基本上尝试检查元素是否存在并截图: -测试1.php:

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

但是测试没有正常运行,因为Chrome容器无法连接到Web容器。屏幕截图显示的页面显示:

This site can't be reached
127.0.0.1 refused to connect

这是运行codeception的附加shell中显示的错误:

[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”的shell得到的输出:

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撰写容器建立网络应该可以解决这个问题。 我试着按照码头工人的文件( Network configuration reference )将网络设置为“主机”,但似乎已过时,因为版本3中不允许使用名称。

还尝试设置从chrome到web的链接,运行chrome而不使用compose(docker run--net=host selenium/standalone chrome),但没有改变。

你知道怎么做吗? 谢谢你的帮助!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37938
 
451 次点击  
文章 [ 1 ]  |  最新文章 4 年前