【发布时间】:2019-12-17 15:19:51
【问题描述】:
我有一个硒网格在 Jenkins 机器上的 docker-compose 下运行。我的 docker-compose 包括一个提供单页应用程序的简单 Web 服务器,以及一个编排测试的测试运行器容器。
version: "3"
services:
hub:
image: selenium/hub
networks:
- selenium
privileged: true
restart: unless-stopped
container_name: hub
ports:
- "4444:4444"
environment:
- SE_OPTS=-browserTimeout 10 -timeout 20
chrome:
image: selenium/node-chrome-debug
networks:
- selenium
privileged: true
restart: unless-stopped
volumes:
- /dev/shm:/dev/shm
depends_on:
- hub
environment:
- HUB_HOST=hub
- HUB_PORT=4444
- SE_OPTS=-browserTimeout 10 -timeout 20
ports:
- "5900:5900"
firefox:
image: selenium/node-firefox-debug
networks:
- selenium
privileged: true
restart: unless-stopped
volumes:
- /dev/shm:/dev/shm
depends_on:
- hub
environment:
- HUB_HOST=hub
- HUB_PORT=4444
- SE_OPTS=-browserTimeout 10 -timeout 20
ports:
- "5901:5900"
runner:
build:
context: ./
dockerfile: ./python.dockerfile
security_opt:
- seccomp=unconfined
cap_add:
- SYS_PTRACE
command: sleep infinity
networks:
- selenium
volumes:
- ./:/app
depends_on:
- hub
- app
- chrome
- firefox
environment:
HUB_CONNECTION_STRING: http://hub:4444/wd/hub
TEST_DOMAIN: "app"
app:
image: nginx:alpine
networks:
- selenium
volumes:
- ../dist:/usr/share/nginx/html
ports:
- "8081:80"
networks:
selenium:
当我的测试运行时(在上面的 runner 容器中),只要我使用 IP 地址,我就可以加载主页 -
def test_home_page_loads(self):
host = socket.gethostbyname(self.test_domain) // this is the TEST_DOMAIN env var above
self.driver.get(f"http://{host}")
header = WebDriverWait(self.driver, 40).until(
EC.presence_of_element_located((By.ID, 'welcome-message')))
assert(self.driver.title == "My Page Title")
assert(header.text == "My Header")
但我不能使用主机名app。以下超时 -
def test_home_page_with_hostname(self):
self.driver.get("http://app/")
email = WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.ID, 'email')))
我面临的问题是我无法使用 IP 地址完成所有这些操作,因为 Web 应用程序正在连接到外部 IP,我需要为 CORS 请求配置 API。
【问题讨论】:
-
您是否将您的服务器地址暴露给
0.0.0.0? -
谢谢@Rash - 我已经通过在 Nginx 配置中更改
server_name解决了这个问题。 (我认为问题是 chrome 容器无法访问应用程序容器 - 问题是应用程序容器上的 Web 服务器没有为主机名“app”提供页面)
标签: dns docker-compose cors selenium-grid