0

This is my first time posting in this plateform so if my request lacks informations let me know so I can provide them.

I'm trying to run my end to end tests using Webdriver IO, I've been running my tests locally at first but now I need to execute them in a Gitlab CI pipeline using a docker image, and here are some information about the setup:

Docker image:

  • it's an alpinedocker image
  • node version: 12.18.3
  • npm version:6.14.6
  • Java version: openjdk "11.0.8"
  • Chromium: 85.0.4183.83
  • Mozilla: 80.0.1

Webdriver IO configuration:

  • latest versions of webdriver IO framework, geckodriver, and wdio-geckodriver-service Here is my wdio.cong.js file
const { generate } = require('multiple-cucumber-html-reporter');
const { removeSync } = require('fs-extra');
exports.config = {
  runner: 'local',
  maxInstances: 1,
  capabilities: [
    {
      maxInstances: 1,
      browserName: 'firefox',
      acceptInsecureCerts: true,
      'moz:firefoxOptions': {
        args: ['--headless', '--lang=fr-FR', '--disable-dev-shm-usage']
      }
    }
  ],
  specs: ['./features/adminNavigation.feature'],

  logLevel: 'info',

  bail: 0,

  baseUrl: 'http://localhost:3000',

  waitforTimeout: 10000000,

  connectionRetryTimeout: 120000,

  connectionRetryCount: 3,

  services: ['geckodriver'],

  framework: 'cucumber',

  reporters: [
    [
      'cucumberjs-json',
      {
        jsonFolder: './cucumberjs-reports/json',
        language: 'en'
      }
    ]
  ],

  cucumberOpts: {
    timeout: 40000,
    requireModule: [
      'tsconfig-paths/register',
      () => {
        require('ts-node').register({ files: true, project: './tsconfig.json' });
      }
    ],
    require: ['./**/**/*.step.ts']
  },
  onPrepare: function(config, capabilities) {
    removeSync('./cucumberjs-reports');
  },
  onComplete: function(exitCode, config, capabilities, results) {
    generate({
      jsonDir: './cucumberjs-reports/json',
      reportPath: './cucumberjs-reports/report'
    });
  }
};


My package.json:

    "geckodriver": "^1.20.0",
    "@wdio/cli": "^6.4.5",
    "@wdio/cucumber-framework": "^6.4.3",
    "@wdio/local-runner": "^6.4.5",
    "@wdio/mocha-framework": "^6.4.0",
    "@wdio/selenium-standalone-service": "^6.4.7",
    "@wdio/spec-reporter": "^6.4.0",
    "@wdio/sync": "^6.4.5",
    "chromedriver": "^85.0.1",
    "wdio-chromedriver-service": "^6.0.4",
    "wdio-cucumberjs-json-reporter": "^2.0.2",
    "wdio-geckodriver-service": "^1.1.0",

And here's the error logs :

Execution of 1 spec files started at 2020-09-11T13:15:06.515Z
2062020-09-11T13:15:06.519Z DEBUG @wdio/utils:initialiseServices: initialise service "geckodriver" as NPM package
2072020-09-11T13:15:06.522Z INFO @wdio/cli:launcher: Run onPrepare hook
2082020-09-11T13:15:06.525Z INFO @wdio/cli:launcher: Run onWorkerStart hook
2092020-09-11T13:15:06.535Z INFO @wdio/local-runner: Start worker 0-0 with arg: ./apps/front-e2e-wdio/wdio.ci.conf.js
210[0-0] 2020-09-11T13:15:07.117Z INFO @wdio/local-runner: Run worker command: run
211[0-0] 2020-09-11T13:15:07.247Z DEBUG @wdio/local-runner:utils: init remote session
212[0-0] 2020-09-11T13:15:07.252Z INFO webdriverio: Initiate new session using the ./protocol-stub protocol
213[0-0] RUNNING in firefox - /apps/front-e2e-wdio/features/adminNavigation.feature
214[0-0] 2020-09-11T13:15:07.749Z DEBUG @wdio/utils:initialiseServices: initialise service "geckodriver" as NPM package
215[0-0] 2020-09-11T13:15:07.772Z DEBUG @wdio/local-runner:utils: init remote session
216[0-0] 2020-09-11T13:15:07.774Z INFO webdriverio: Initiate new session using the webdriver protocol
217[0-0] 2020-09-11T13:15:07.778Z INFO webdriver: [POST] http://localhost:34305/session
218[0-0] 2020-09-11T13:15:07.778Z INFO webdriver: DATA {
219 capabilities: {
220 alwaysMatch: {
221 browserName: 'firefox',
222 acceptInsecureCerts: true,
223 'moz:firefoxOptions': [Object]
224 },
225 firstMatch: [ {} ]
226 },
227 desiredCapabilities: {
228 browserName: 'firefox',
229 acceptInsecureCerts: true,
230 'moz:firefoxOptions': { args: [Array] }
231 }
232}
233[0-0] 2020-09-11T13:15:10.623Z DEBUG webdriver: request failed due to response error: unknown error
234[0-0] 2020-09-11T13:15:10.624Z INFO webdriver: Retrying 1/3
2352020-09-11T13:15:10.624Z INFO webdriver: [POST] http://localhost:34305/session
2362020-09-11T13:15:10.624Z INFO webdriver: DATA {
237 capabilities: {
238 alwaysMatch: {
239 browserName: 'firefox',
240 acceptInsecureCerts: true,
241 'moz:firefoxOptions': [Object]
242 },
243 firstMatch: [ {} ]
244 },
245 desiredCapabilities: {
246 browserName: 'firefox',
247 acceptInsecureCerts: true,
248 'moz:firefoxOptions': { args: [Array] }
249 }
250}
251[0-0] 2020-09-11T13:15:10.623Z WARN webdriver: Request failed with status 500 due to invalid argument: can't kill an exited process
252[0-0] 2020-09-11T13:15:13.141Z DEBUG webdriver: request failed due to response error: unknown error
253[0-0] 2020-09-11T13:15:13.142Z WARN webdriver: Request failed with status 500 due to invalid argument: can't kill an exited process
254[0-0] 2020-09-11T13:15:13.142Z INFO webdriver: Retrying 2/3
255[0-0] 2020-09-11T13:15:13.143Z INFO webdriver: [POST] http://localhost:34305/session
256[0-0] 2020-09-11T13:15:13.143Z INFO webdriver: DATA {
257 capabilities: {
258 alwaysMatch: {
259 browserName: 'firefox',
260 acceptInsecureCerts: true,
261 'moz:firefoxOptions': [Object]
262 },
263 firstMatch: [ {} ]
264 },
265 desiredCapabilities: {
266 browserName: 'firefox',
267 acceptInsecureCerts: true,
268 'moz:firefoxOptions': { args: [Array] }
269 }
270}
271[0-0] 2020-09-11T13:15:15.558Z DEBUG webdriver: request failed due to response error: unknown error
272[0-0] 2020-09-11T13:15:15.567Z INFO webdriver: Retrying 3/3
273[0-0] 2020-09-11T13:15:15.567Z INFO webdriver: [POST] http://localhost:34305/session
274[0-0] 2020-09-11T13:15:15.568Z INFO webdriver: DATA {
275 capabilities: {
276 alwaysMatch: {
277 browserName: 'firefox',
278 acceptInsecureCerts: true,
279 'moz:firefoxOptions': [Object]
280 },
281 firstMatch: [ {} ]
282 },
283 desiredCapabilities: {
284 browserName: 'firefox',
285 acceptInsecureCerts: true,
286 'moz:firefoxOptions': { args: [Array] }
287 }
288}
289[0-0] 2020-09-11T13:15:15.566Z WARN webdriver: Request failed with status 500 due to invalid argument: can't kill an exited process
290[0-0] 2020-09-11T13:15:17.985Z DEBUG webdriver: request failed due to response error: unknown error
291[0-0] 2020-09-11T13:15:17.986Z ERROR webdriver: Request failed with status 500 due to unknown error: invalid argument: can't kill an exited process
2922020-09-11T13:15:17.986Z ERROR webdriver: unknown error: invalid argument: can't kill an exited process
293 at getErrorFromResponseBody (/builds/node_modules/webdriver/build/utils.js:121:10)
294 at WebDriverRequest._request (/builds/node_modules/webdriver/build/request.js:149:56)
295 at processTicksAndRejections (internal/process/task_queues.js:97:5)
296 at async startWebDriverSession (/builds/node_modules/webdriver/build/utils.js:41:16)
297 at async Function.newSession (/builds/node_modules/webdriver/build/index.js:44:23)
298 at async remote (/builds/node_modules/webdriverio/build/index.js:75:20)
299 at async Runner._startSession (/builds/node_modules/@wdio/runner/build/index.js:206:50)
300 at async Runner._initSession (/builds/node_modules/@wdio/runner/build/index.js:175:21)
301 at async Runner.run (/builds/node_modules/@wdio/runner/build/index.js:93:15)
3022020-09-11T13:15:17.987Z ERROR @wdio/runner: Error: Failed to create session.
303invalid argument: can't kill an exited process
304 at startWebDriverSession (/builds/node_modules/webdriver/build/utils.js:45:11)
305 at processTicksAndRejections (internal/process/task_queues.js:97:5)
306[0-0] Error: Failed to create session.
307invalid argument: can't kill an exited process
3082020-09-11T13:15:18.108Z DEBUG @wdio/local-runner: Runner 0-0 finished with exit code 1
309[0-0] FAILED in firefox - /apps/front-e2e-wdio/features/adminNavigation.feature
3102020-09-11T13:15:18.110Z INFO @wdio/cli:launcher: Run onComplete hook
3112020-09-11T13:15:18.112Z ERROR @wdio/cli:utils: Error in onCompleteHook: Error: There were issues reading JSON-files from './apps/front-e2e-wdio/cucumberjs-reports/json'.
312 at collectJSONS (/builds/node_modules/multiple-cucumber-html-reporter/lib/collect-jsons.js:16:15)
313 at generateReport (/builds/node_modules/multiple-cucumber-html-reporter/lib/generate-report.js:69:22)
314 at Object.onComplete (/builds/apps/front-e2e-wdio/wdio.ci.conf.js:44:5)
315 at /builds/node_modules/@wdio/cli/build/utils.js:109:13
316 at Array.map (<anonymous>)
317 at runOnCompleteHook (/builds/node_modules/@wdio/cli/build/utils.js:107:37)
318 at Launcher.run (/builds/node_modules/@wdio/cli/build/launcher.js:83:69)
319 at processTicksAndRejections (internal/process/task_queues.js:97:5)
320Spec Files: 0 passed, 1 failed, 1 total (100% completed) in 00:00:11 
3212020-09-11T13:15:18.114Z INFO @wdio/local-runner: Shutting down spawned worker
3222020-09-11T13:15:18.365Z INFO @wdio/local-runner: Waiting for 0 to shut down gracefully
3232020-09-11T13:15:18.366Z INFO @wdio/local-runner: shutting down


edit The commande that i'm using to run my tests is the following : "npx wdio wdio.conf.js".

And here's the Docker config file im using:

FROM alpine:latest

ARG BUILD_DATE
ARG VCS_REF

USER root

# Install node
RUN apk add --update nodejs npm

# Installs latest Chromium package.
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" > /etc/apk/repositories \
    && echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
    && echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
    && echo "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" >> /etc/apk/repositories \
    && apk upgrade -U -a \
    && apk add --no-cache \
    libstdc++ \
    chromium \
    harfbuzz \
    nss \
    freetype \
    ttf-freefont \
    wqy-zenhei \
    && rm -rf /var/cache/* \
    && mkdir /var/cache/apk

# Add Chrome as a user
RUN mkdir -p /usr/src/app \
    && adduser -D chrome \
    && chown -R chrome:chrome /usr/src/app
# Run Chrome as non-privileged
USER chrome
WORKDIR /usr/src/app

ENV CHROME_BIN=/usr/bin/chromium-browser \
    CHROME_PATH=/usr/lib/chromium/

USER root
# Install firefox
RUN apk upgrade --update-cache --available
RUN apk add xvfb firefox dbus py-pip ttf-dejavu

ENV FIREFOX_BIN=/usr/bin/firefox

# Install bash && curl
RUN apk add --no-cache bash
RUN apk --no-cache add curl

#ADD wait module
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.2.1/wait /wait
RUN chmod +x /wait

# Install Mongo Tools
RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.9/community' >> /etc/apk/repositories
RUN apk add mongodb-tools

# Install jdk11
RUN apk --no-cache add openjdk11 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community

# Install chromeDriver
RUN apk add --no-cache chromium-chromedriver

RUN ls

RUN node -v
RUN npm -v
RUN java -version
RUN chromium-browser --version
RUN firefox --version
# RUN apt-cache policy chromium | grep Installed | sed -e "s/Installed/Chrome/"

CMD tail -f /dev/null  

Mr. Grails
  • 11
  • 1
  • 3
  • It is better to show a content of dockerfile and commands how you run your tests – ujlbu4 Sep 13 '20 at 23:23
  • @ujlbu4 Hi, i added the informations you asked for can you review please – Mr. Grails Sep 14 '20 at 10:21
  • Does you tests run successfully when running locally? According to your logs it couldn't create [WebDriver session](https://w3c.github.io/webdriver/#new-session) due to some config problems. Probably it some [version incompatibilities](https://stackoverflow.com/questions/52534658/webdriverexception-message-invalid-argument-cant-kill-an-exited-process-with) or just config typos. Does your local run successful? – ujlbu4 Sep 16 '20 at 10:43
  • @ujlbu4 hi thanks for your comment. And yes it runs perfectly locally on chrome, firfox and in headless mode as well. and you're right it might be a compatibility issue which is what i'm investigating as we speak. – Mr. Grails Sep 17 '20 at 08:11
  • @NizarSF Do you run them locally from inside the same docker image? If not, then try it. – BVengerov Sep 18 '20 at 07:47
  • @BVengerov I'm sorry i don't really have much experience with docker images, do i have to install all the packages i have in my test project and do i need to have the test project inside the image too? – Mr. Grails Sep 18 '20 at 08:27
  • @NizarSF I would build this docker image locally and try to reproduce the issue from inside the container. If it still fails, then the problem is definitely not related to gitlab in any way, and it's much easier to debug it further. – BVengerov Sep 18 '20 at 13:26
  • @BVengerov I tried and run my tests inside the docker image which was successful and enabled me to find the right combination of firefox browser and geckodriver, but even so It did not work on gitlabCi, I thought the problem would be solved if i managed to get it working on my docker container. – Mr. Grails Oct 01 '20 at 08:03

1 Answers1

0

please see a repo https://gitlab.com/bar_foo/wdio-cucumber-typescript for en example of how to run tests in Chrome and Firefox in the GitLab pipeline.

Note: you don't need Java in the image if you decided to use devtools automation protocol instead of webdriver protocol, see https://webdriver.io/blog/2019/09/16/devtools.html

Mike G.
  • 3,860
  • 3
  • 17
  • 18
  • G Thanks for your answer,I tried your setup ,i have however a question about that firefox installation commande. I'm using alpine as a base image and i can't really change it so i went ahead and altered the commande (apt-get does not exist) in order for it to work but i have a problem installing these packages(apt-get -qqy install libx11-xcb1 libxt-dev libgtk-3-bin libdbus-glib-1-2). are these dependencies that u found were missing on the image? im trying to find the equivalent of these packages in alpine but i don't know if these are really going to solve my issue. – Mr. Grails Sep 22 '20 at 08:37
  • These are required packages for the firefox browser. Have you tried running firefox after installing in container? What error does it throw? – Mike G. Sep 22 '20 at 12:04
  • Greetings, i tried your setup and it didn't work at first then I decided to try and run my tests inside the docker image which was successful and enabled me to find the right combination of firefox browser and geckodriver, but even so It did not work on gitlabCi, I thought the problem would be solved if i managed to get it working on my docker container. – Mr. Grails Oct 01 '20 at 08:02