我有一个docker容器,它依赖selenium作为链接服务(也是一个docker容器)。这个docker容器只使用selenium服务作为主机无头地运行nightwatchJS测试。 selenium服务启动正常但是当nightwatch测试尝试在docker容器内运行时,我在selenium服务端口上收到拒绝连接错误(4444)。我可以使用curl访问此端口的selenium主机,如果我不通过docker运行测试,也可以在其上运行nightwatch测试。这是我的docker撰写yaml文件:
services:
selenium:
image: selenium/standalone-chrome
ports:
- "4444:4444"
nightwatch:
build: .
volumes:
- .:/home/client_test
links:
- selenium
environment:
selenium: 4444
expose:
- "4444"
和我的泊坞文件:
#
#Nightwatch.js Dockerfile
#
FROM alpine:3.4
WORKDIR /home/client-tests
ADD . /home/client-tests/
ENV NODE_PATH=/home/client-app/node_modules
#RUN apk add 'firefox-esr<45.6.0-r0'
#install firefox
#RUN wget -c http://ftp.mozilla.org/pub/firefox/releases/45.8.0esr/firefox-45.8.0esr.linux-x86_64.sdk.tar.bz2 -P /usr/local
#RUN tar xvjf /usr/local/firefox-45.8.0esr.linux-x86_64.sdk.tar.bz2
#RUN ln -s /usr/local/firefox/firefox /usr/local/bin/
RUN apk --no-cache --update add bash \
# Install tini, a tiny but valid init for containers
tini \
# Install nodejs
nodejs-lts \
#Install java
openjdk8-jre-base \
#Install chrome
chromium \
chromium-chromedriver \
#Install firefox
#firefox \
unzip \
wget \
xvfb \
dbus \
tar \
# Install other dependencies
&& npm install -g nightwatch \
# -g request \
# chai \
# superagent \
# Clean up obsolete files:
&& rm -rf \
/tmp/* \
/root/.npm
#RUN apk update -q && apk add --no-cache xvfb firefox-esr dbus
#ADD https://gist.github.com/elbaschid/5a91271c07bb0de7bfa6/raw/d07b4eecf02fd3341ef72753e4c5875cf137bda8/xvfb-run.sh /usr/bin/xvfb-run
#RUN chmod u+x /usr/bin/xvfb-run
#
RUN npm install request
RUN npm install chai
RUN npm install superagent
EXPOSE 4444
#
##Fetch the chrome drive for linux
#RUN rm -rf /home/client-app/bin/chromedriver
#RUN rm -rf /home/client-app/bin/geckodriver
#
#RUN wget -c http://chromedriver.storage.googleapis.com/2.28/chromedriver_linux64.zip -P /tmp
#RUN unzip /tmp/chromedriver_linux64.zip -d /tmp
#RUN chmod +x /tmp/chromedriver
#RUN mv -f /tmp/chromedriver /home/client-app/bin/chromedriver
#
##get the gecko driver for linux
#RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.16.1/geckodriver-v0.16.1-linux64.tar.gz -P /tmp
#RUN tar xvzf /tmp/geckodriver-v0.16.1-linux64.tar.gz -C /tmp
#RUN chmod 755 /tmp/geckodriver
#RUN mv -f /tmp/geckodriver /home/client-app/bin/geckodriver
#CMD xvfb-run -e java -Dwebdriver.chrome.driver=./bin/chromedriver -jar ./bin/selenium-server-standalone-3.4.0.jar &; nightwatch -e chrome -t tests/*'
CMD nightwatch -e chrome -t tests/loginTest.js
这是我的nightwatchJS json文件,用于指定主机(为隐私而更改网址)
{
"src_folders" : ["./tests"],
"output_folder" : "./reports",
"custom_commands_path" : "./custom-commands",
"page_objects_path" : "",
"custom_assertions_path" : "",
"globals_path" : "./globals.js",
"live_output" : false,
"parallel_process_delay" : 10,
"disable_colors": false,
"test_workers" : true,
"selenium" : {
"start_process" : false,
"server_path" : "./bin/selenium-server-standalone-3.4.0.jar",
"log_path" : "",
"host" : "127.0.0.1",
"port" : 4444,
"cli_args" : {
"webdriver.gecko.driver" : "./bin/geckodriver",
"webdriver.chrome.driver" : "./bin/chromedriver",
"webdriver.ie.driver" : "./bin/IEDriverServer.exe"
}
},
"test_settings" : {
"default" : {
"launch_url" : "https://google.com",
"selenium_host" : "hub",
"selenium_port" : 4444,
"silent" : true,
"disable_colors": false,
"screenshots" : {
"enabled" : true,
"path" : "./screenshots"
},
"desiredCapabilities" : {
"browserName" : "firefox",
"javascriptEnabled" : true,
"acceptSslCerts" : true,
"acceptInsecureCerts" : true,
"applicationCacheEnabled" : true
}
},
"chrome" : {
"launch_url" : "https://google.com/",
"selenium_host" : "0.0.0.0",
"selenium_post" : 4444,
"disable_colors" : false,
"screenshots" : {
"enabled" : false,
"path" : ""
},
"desiredCapabilities" : {
"browserName" : "chrome",
"javascriptEnabled" : true,
"acceptSslCerts" : true,
"acceptInsecureCerts" : true,
"chromeOptions": {
"args": [ "--no-sandbox"]
}
}
},
"IE" : {
"launch_url" : "https://google.com/",
"selenium_host" : "fakeURLFORSTACK.com",
"selenium_post" : 4444,
"disable_colors" : false,
"screenshots" : {
"enabled" : false,
"path" : ""
},
"desiredCapabilities" : {
"browserName" : "internet explorer",
"javascriptEnabled" : true,
"acceptSslCerts" : true,
"acceptInsecureCerts" : true
}
},
"saucelabs" : {
"selenium_host" : "ondemand.saucelabs.com",
"selenium_port" : 80,
"username" : "${SAUCE_USERNAME}",
"access_key" : "${SAUCE_ACCESS_KEY}",
"use_ssl" : false,
"silent" : true,
"output" : true,
"screenshots" : {
"enabled" : false,
"on_failure" : true,
"path" : ""
},
"desiredCapabilities": {
"name" : "test-example",
"browserName": "firefox"
},
"globals" : {
"myGlobal" : "some_sauce_global"
},
"selenium" : {
"start_process" : false
}
},
"phantomjs" : {
"desiredCapabilities" : {
"browserName" : "phantomjs",
"javascriptEnabled" : true,
"acceptSslCerts" : true,
"acceptInsecureCerts" : true,
"phantomjs.binary.path" : "phantomjs"
}
},
"browserstack" : {
"selenium" : {
"start_process" : false
},
"selenium_host" : "hub.browserstack.com",
"selenium_port" : 80,
"silent" : true,
"desiredCapabilities": {
"name" : "test-example",
"browserName": "firefox",
"browserstack.user" : "...",
"browserstack.key" : "..."
}
},
"testingbot" : {
"selenium_host" : "hub.testingbot.com",
"selenium_port" : 80,
"apiKey" : "${TB_KEY}",
"apiSecret" : "${TB_SECRET}",
"silent" : true,
"output" : true,
"screenshots" : {
"enabled" : false,
"on_failure" : true,
"path" : ""
},
"desiredCapabilities": {
"name" : "test-example",
"browserName": "firefox"
},
"selenium" : {
"start_process" : false
}
}
}
}
如何让我在一个泊坞容器中运行的夜班测试能够利用在4444端口运行的另一个selenium主机?
答案 0 :(得分:2)
每个容器都有自己的网络。每个接口都有eth0
和lo
(localhost)接口,它们位于docker的网络中。
因此,您的selenium不在Nighwatch应用程序的本地主机中。它可以这样:
selenium:4444
该主机名被转换为与selenium
容器对应的正确IP。因此,请根据该信息调整脚本和配置。
您可以使用以下方法查找和检查docker网络:
docker network ls
docker network inspect <network-id>