社区, 我对在docker中运行量角器测试感到困惑。请帮助我解决我的问题。谢谢
这就是我想要做的。
baseUrl: 'http://localhost:4200/',
seleniumAddress: 'http://172.18.0.2:4444/wd/hub/',
借助Docker文件到Docker映像
FROM node:12.8.1-alpine as build-step
WORKDIR /app
COPY package.json ./
RUN npm install
RUN npm install -g protractor@5.4.2
RUN apk add openjdk8
ENV PATH $PATH:/usr/lib/jvm/java-1.8-openjdk/bin
COPY . .
EXPOSE 4200 4444
CMD npm start
version: "3"
services:
hub:
container_name: hub
image: selenium/hub:3.141.59
privileged: true
ports:
- 4444:4444
environment:
- GRID_BROWSER_TIMEOUT=240000
- GRID_TIMEOUT=240000
chrome:
container_name: node-chrome
image: selenium/node-chrome:3.141.59
privileged: true
shm_size: 256M
depends_on:
- hub
environment:
- HUB_HOST=hub
- no_proxy=localhost
- HUB_PORT_4444_TCP_ADDR=hub
- HUB_PORT_4444_TCP_PORT=4444
testapp:
container_name: testapp
build: .
image: dneprokos/testapp
ports:
- "4200:4200"
depends_on:
- chrome
- hub
docker container exec -it testapp sh // to attach
protractor ./e2e/protractor.conf.js // to run tests
注意:
首先,我尝试使用localhost在容器内部运行测试,但后来意识到它在容器内部包含另一个主机。但是即使我更改了主机,它也无法解决问题。
此外,我尝试不运行网格容器,而是使用“ webdriver-manager更新”和“ webdriver-manager启动”命令。启动工作正常,但是在测试启动过程中会发生相同的问题。
您似乎已经暴露了端口,因此我可以轻松地检查它在硒网格和测试应用程序中都可以在本地运行。 只有一件事,如果我尝试在本地连接到“ http://localhost:4444/wd/hub/”,它将显示以下异常:
“ sessionId”:null, “状态”:13 “值”:{ “ class”:“ org.openqa.grid.common.exception.GridException”, “错误”:“未知错误”, “ message”:“会话[(null externalkey)]不可用,也不在最近的1000个终止会话中。\ n活动会话为[]”,
预期结果:应该开始测试运行
实际结果:
[17:44:34] E/launcher - Error code: 135
[17:44:34] E/launcher - Error message: ECONNREFUSED connect ECONNREFUSED 172.18.0.2:4444
[17:44:34] E/launcher - Error: ECONNREFUSED connect ECONNREFUSED 172.18.0.2:4444
at ClientRequest.<anonymous> (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:238:15)
at ClientRequest.emit (events.js:203:13)
at Socket.socketErrorListener (_http_client.js:399:9)
at Socket.emit (events.js:203:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at processTicksAndRejections (internal/process/task_queues.js:77:11)
From: Task: WebDriver.createSession()
at Function.createSession (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver.js:769:24)
答案 0 :(得分:1)
感谢您的评论,我已经解决了我的问题。只需在protractor.conf中使用容器名称作为应用程序基本URL和Selenium Hub URL,像这样
此外,我发现我需要使用以下命令“ ng serve --host 0.0.0.0 --disable-host-check”启动角度应用程序。在另一种情况下,打开容器中的应用程序会遇到一些麻烦。