docker - docker selenium/standalone-chrome 无法连接到 docker web 服务器
问题描述
我正在尝试使用 codeception 为使用 docker 容器开发的 php 网站运行测试。我在 web 容器中创建了一个测试文件夹并将 codecept.phar 放在那里。
这是项目的设置:
码头工人-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
验收套件.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
我正在运行一个简单的测试,它基本上试图检查一个元素是否存在并截取屏幕截图:-test1.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
这是附加的 shell 运行 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”的 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-compose 容器建立一个网络应该可以解决这个问题。我尝试按照 docker 文档(网络配置参考)将网络设置为“主机”,但它似乎已经过时,因为版本 3 中不允许使用名称。
还尝试设置从 chrome 到 web 的链接,并在没有 compose 的情况下运行 chrome(docker run --net=host selenium/standalone-chrome),但这并没有改变。
你知道一种方法来完成这项工作吗?谢谢你的帮助!
解决方案
尝试通过设置允许非本地主机连接到 chromeJAVA_OPTS
chrome:
image: selenium/standalone-chrome
restart: always
ports:
- '4444:4444'
- '5900:5900'
environment:
- JAVA_OPTS=-Dwebdriver.chrome.whitelistedIps=
depends_on:
- web
推荐阅读
- unity3d - 触发器 Collinder 不适用于 Input.GetKey
- xlsx - 错误:在 zip 中找不到文件 [Content_Types].xml
- javascript - 获取特定 Microsoft Azure 租户的应用程序列表
- java - Talend:在 tMap 中获取字符串的 SOUNDEX
- r - 如何重塑这张桌子?
- angular - 量角器点击后面的元素
- api - Office 应用商店拒绝 Outlook 模块扩展加载项。如何仅提交模块扩展插件
- excel - 分页检测硒VBA
- excel - 将链接插入到在另一张纸上显示信息的单元格内容中
- swift - 未收到更新的@Published 事件