I want to have three connected docker containers (to run it on a build server):
- My application (name: app)
- A browser (in this case chrome; name: selenium)
- My End2End/UI-Tests (name tester)
However the tests aren't running. The current error message from the tester container is "Request failed with status 500 due to unknown error: net::ERR_SSL_PROTOCOL_ERROR"
file structure:
dir
test
specs
basic.js
app.js
docker-compose.yml
Dockerfile
package.json
wdio.conf.js
And here my files: "docker-compose.yml":
version: '3'
services:
tester:
build:
context: .
target: e2e-tests
command: npx wdio wdio.conf.js
links:
- selenium
selenium:
image: selenium/standalone-chrome
expose:
- "4444"
links:
- app
app:
build:
context: .
target: prod
expose:
- "3000"
command: npm start
"Dockerfile":
FROM node:12 as base
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
FROM base as prod
COPY app.js ./
EXPOSE 3000
FROM base as e2e-tests
COPY wdio.conf.js ./
COPY test test
"wdio.conf.js":
exports.config = {
hostname: 'selenium',
path: '/wd/hub',
specs: [
'./test/specs/**/*.js'
],
exclude: [],
maxInstances: 10,
capabilities: [{
maxInstances: 5,
browserName: 'chrome',
acceptInsecureCerts: true
}],
logLevel: 'info',
bail: 0,
baseUrl: 'http://localhost',
waitforTimeout: 10000,
connectionRetryTimeout: 120000,
connectionRetryCount: 3,
framework: 'jasmine',
reporters: ['spec'],
jasmineNodeOpts: {
defaultTimeoutInterval: 60000,
expectationResultHandler: function(passed, assertion) {}
},
}
"test/spec/basic.js":
describe('test app', () => {
it('should have the right title', () => {
browser.url('http://app:3000')
expect(browser).toHaveTextContaining('Hello');
})
})
"app.js":
const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('<html><head><title>Hello</title></head><body>Hello World!</body></html>'));
const server = app.listen(3000, () => {
const { port } = server.address();
console.log(`Test app listening on port ${port}`);
});
"package.json":
{
"name": "wdiodocker",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node app.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"@wdio/cli": "^6.5.2",
"@wdio/jasmine-framework": "^6.5.0",
"@wdio/local-runner": "^6.5.2",
"@wdio/spec-reporter": "^6.4.7",
"@wdio/sync": "^6.5.0",
"wdio-docker-service": "^3.0.0"
}
}
"bigger snippet from the log":
tester_1 | 2020-09-28T07:55:11.844Z INFO @wdio/cli:launcher: Run onPrepare hook
tester_1 | 2020-09-28T07:55:11.848Z INFO @wdio/cli:launcher: Run onWorkerStart hook
tester_1 | 2020-09-28T07:55:11.850Z INFO @wdio/local-runner: Start worker 0-0 with arg: wdio.conf.js
selenium_1 | 07:55:12.017 INFO [GridLauncherV3.lambda$buildLaunchers$3] - Launching a standalone Selenium Server on port 4444
selenium_1 | 2020-09-28 07:55:12.150:INFO::main: Logging initialized @1038ms to org.seleniumhq.jetty9.util.log.StdErrLog
tester_1 | [0-0] 2020-09-28T07:55:12.634Z INFO @wdio/local-runner: Run worker command: run
tester_1 | [0-0] 2020-09-28T07:55:12.658Z INFO webdriverio: Initiate new session using the ./protocol-stub protocol
selenium_1 | 07:55:12.862 INFO [WebDriverServlet.<init>] - Initialising WebDriverServlet
tester_1 | [0-0] RUNNING in chrome - /test/specs/basic.js
tester_1 | [0-0] 2020-09-28T07:55:13.056Z INFO webdriverio: Initiate new session using the webdriver protocol
tester_1 | [0-0] 2020-09-28T07:55:13.060Z INFO webdriver: [POST] http://selenium:4444/wd/hub/session
tester_1 | [0-0] 2020-09-28T07:55:13.061Z INFO webdriver: DATA {
tester_1 | capabilities: {
tester_1 | alwaysMatch: { browserName: 'chrome', acceptInsecureCerts: true },
tester_1 | firstMatch: [ {} ]
tester_1 | },
tester_1 | desiredCapabilities: { browserName: 'chrome', acceptInsecureCerts: true }
tester_1 | }
selenium_1 | 07:55:13.122 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444
selenium_1 | 07:55:13.331 INFO [ActiveSessionFactory.apply] - Capabilities are: {
selenium_1 | "acceptInsecureCerts": true,
selenium_1 | "browserName": "chrome"
selenium_1 | }
selenium_1 | 07:55:13.335 INFO [ActiveSessionFactory.lambda$apply$11] - Matched factory org.openqa.selenium.grid.session.remote.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService)
selenium_1 | Starting ChromeDriver 85.0.4183.83 (94abc2237ae0c9a4cb5f035431c8adfb94324633-refs/branch-heads/4183@{#1658}) on port 24508
selenium_1 | Only local connections are allowed.
selenium_1 | Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
selenium_1 | ChromeDriver was started successfully.
selenium_1 | [1601279713.386][SEVERE]: bind() failed: Cannot assign requested address (99)
selenium_1 | 07:55:14.377 INFO [ProtocolHandshake.createSession] - Detected dialect: W3C
selenium_1 | 07:55:14.428 INFO [RemoteSession$Factory.lambda$performHandshake$0] - Started new session 82d59567606b7f101da8650600e7dd00 (org.openqa.selenium.chrome.ChromeDriverService)
tester_1 | [0-0] 2020-09-28T07:55:14.607Z INFO webdriver: COMMAND navigateTo("http://app:3000/")
tester_1 | [0-0] 2020-09-28T07:55:14.610Z INFO webdriver: [POST] http://selenium:4444/wd/hub/session/82d59567606b7f101da8650600e7dd00/url
tester_1 | [0-0] 2020-09-28T07:55:14.611Z INFO webdriver: DATA { url: 'http://app:3000/' }
tester_1 | [0-0] 2020-09-28T07:55:15.188Z WARN webdriver: Request failed with status 500 due to unknown error: net::ERR_SSL_PROTOCOL_ERROR
tester_1 | (Session info: chrome=85.0.4183.83)
tester_1 | [0-0] 2020-09-28T07:55:15.189Z INFO webdriver: Retrying 1/3
tester_1 | [0-0] 2020-09-28T07:55:15.190Z INFO webdriver: [POST] http://selenium:4444/wd/hub/session/82d59567606b7f101da8650600e7dd00/url
tester_1 | [0-0] 2020-09-28T07:55:15.191Z INFO webdriver: DATA { url: 'http://app:3000/' }
tester_1 | [0-0] 2020-09-28T07:55:15.592Z WARN webdriver: Request failed with status 500 due to unknown error: net::ERR_SSL_PROTOCOL_ERROR
tester_1 | (Session info: chrome=85.0.4183.83)
tester_1 | [0-0] 2020-09-28T07:55:15.592Z INFO webdriver: Retrying 2/3
tester_1 | [0-0] 2020-09-28T07:55:15.594Z INFO webdriver: [POST] http://selenium:4444/wd/hub/session/82d59567606b7f101da8650600e7dd00/url
tester_1 | [0-0] 2020-09-28T07:55:15.595Z INFO webdriver: DATA { url: 'http://app:3000/' }
tester_1 | [0-0] 2020-09-28T07:55:15.942Z WARN webdriver: Request failed with status 500 due to unknown error: net::ERR_SSL_PROTOCOL_ERROR
tester_1 | (Session info: chrome=85.0.4183.83)
tester_1 | [0-0] 2020-09-28T07:55:15.943Z INFO webdriver: Retrying 3/3
tester_1 | [0-0] 2020-09-28T07:55:15.944Z INFO webdriver: [POST] http://selenium:4444/wd/hub/session/82d59567606b7f101da8650600e7dd00/url
tester_1 | [0-0] 2020-09-28T07:55:15.945Z INFO webdriver: DATA { url: 'http://app:3000/' }
tester_1 | [0-0] 2020-09-28T07:55:16.104Z ERROR webdriver: Request failed with status 500 due to unknown error: unknown error: net::ERR_SSL_PROTOCOL_ERROR
tester_1 | (Session info: chrome=85.0.4183.83)
tester_1 | [0-0] Error in "test app should have the right title"
tester_1 | unknown error: unknown error: net::ERR_SSL_PROTOCOL_ERROR
tester_1 | (Session info: chrome=85.0.4183.83)
tester_1 | [0-0] 2020-09-28T07:55:16.118Z INFO webdriver: COMMAND deleteSession()
tester_1 | [0-0] 2020-09-28T07:55:16.119Z INFO webdriver: [DELETE] http://selenium:4444/wd/hub/session/82d59567606b7f101da8650600e7dd00
selenium_1 | 07:55:16.196 INFO [ActiveSessions$1.onStop] - Removing session 82d59567606b7f101da8650600e7dd00 (org.openqa.selenium.chrome.ChromeDriverService)
tester_1 | [0-0] FAILED in chrome - /test/specs/basic.js
tester_1 | 2020-09-28T07:55:16.299Z INFO @wdio/cli:launcher: Run onComplete hook
tester_1 |
tester_1 | "spec" Reporter:
tester_1 | ------------------------------------------------------------------
tester_1 | [chrome 85.0.4183.83 linux #0-0] Spec: /usr/src/app/test/specs/basic.js
tester_1 | [chrome 85.0.4183.83 linux #0-0] Running: chrome (v85.0.4183.83) on linux
tester_1 | [chrome 85.0.4183.83 linux #0-0] Session ID: 82d59567606b7f101da8650600e7dd00
tester_1 | [chrome 85.0.4183.83 linux #0-0]
tester_1 | [chrome 85.0.4183.83 linux #0-0] test app
tester_1 | [chrome 85.0.4183.83 linux #0-0] ✖ should have the right title
tester_1 | [chrome 85.0.4183.83 linux #0-0]
tester_1 | [chrome 85.0.4183.83 linux #0-0] 1 failing (1.6s)
tester_1 | [chrome 85.0.4183.83 linux #0-0]
tester_1 | [chrome 85.0.4183.83 linux #0-0] 1) test app should have the right title
tester_1 | [chrome 85.0.4183.83 linux #0-0] unknown error: unknown error: net::ERR_SSL_PROTOCOL_ERROR
tester_1 | (Session info: chrome=85.0.4183.83)
tester_1 | [chrome 85.0.4183.83 linux #0-0] at <Jasmine>
tester_1 | [chrome 85.0.4183.83 linux #0-0] at processTicksAndRejections (internal/process/task_queues.js:97:5)
tester_1 | [chrome 85.0.4183.83 linux #0-0] at UserContext.<anonymous> (/usr/src/app/test/specs/basic.js:3:17)
Some hints:
- when I call curl http://app:3000 from tester or selenium container I receive the HTML as expected.
- when I navigate to google in the test, I receive the google code
- Thank you for your time!