Skip to content

BDD Tests are failing due to Chrome session not being able to create on CI pipeline #3094

@SavitaMaurya

Description

@SavitaMaurya

What are you trying to achieve?

Running tests successfully on our GitHub action Runner : ubuntu-latest container. It was working all good but broke 8 days ago (14th oct 2021)

I tried investigating & observed both this docker images are updated on same date, but reverting them back to older version selenium/hub:: 3.141 & selenium/node-chrome:93.0 didn't helped, got same error attached below

hub:
        image: selenium/hub:latest
      chrome:
        image: selenium/node-chrome:latest

Note : Tests run fine on local machine with same configuration running on CI pipeline.

What do you get instead?

Checkout page verification on Store --
[1] Starting recording promises
**Verifying checkout page - Annual, prepaid @store
[1] Error | Error: Can't connect to WebDriver.
Error: Failed to create session.
Timeout awaiting 'request' for 120000ms

Please make sure Selenium Server is running and accessible
Error: Can't connect to WebDriver.
Error: Failed to create session.
Timeout awaiting 'request' for 120000ms**

Please make sure Selenium Server is running and accessible
Given I am on test site
I am on page "/"
[1] Error | TypeError: Cannot read property 'url' of undefined
[1] Error | TypeError: Cannot read property 'url' of undefined
[1] Error | TypeError: Cannot read property 'url' of undefined
[1] Starting session
[1] Stopping recording promises
› Test failed, try to save a screenshot
› Screenshot has been saved to /__w/web-project-ui-automation-test-framework/web-project-ui-automation-test-framework/output/Verifying__d2382720-3a95-4e87-a5d9-466410c33dc3.failed.png
› <TypeError: Cannot read property 'saveScreenshot' of undefined>
✖ FAILED in 14ms

Provide test source code if related

workflow.yml

name: Build & Test

on:
  push:
    branches: [master]
  pull_request:
    branches: [master]

jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: node:14.4
      options: --network-alias testHost
    env:
      NODE_ENV: test
      SELENIUM_HUB_HOST: hub
      TEST_HOST: testHost

    services:
      hub:
        image: selenium/hub:latest
      chrome:
        image: selenium/node-chrome:latest
        env:
          HUB_HOST: hub
          HUB_PORT: 4444

    strategy:
      matrix:
        node-version: [14.4]

    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
          registry-url: 'https://npm.pkg.github.com'
          scope: '@xyz-technologies'
      - name: NPM install
        run: npm install
        env:
          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_PAT }}
      - name: Run Store Tests
        run: npx codeceptjs run --grep @store --reporter mocha-multi --profile https://store.xyz.com/ --config test.codecept.conf.js
      - name: Archive mochawesome Test Report
        if: ${{ always() }}
        uses: actions/upload-artifact@v2
        with:
          name: mochawesome-test-report
          path: ./output

Details

  • CodeceptJS version: "3.1.2",
  • NodeJS Version: 14.4
  • Operating System: Linux ubuntu-latest
  • puppeteer || webdriverio || testcafe version (if related) webdriverio
  • Configuration file:
const { setHeadlessWhen } = require('@codeceptjs/configure');
const { WAIT_FOR } = require('../constants');
const {
  CheckElementPresenceHelper,
  VisualTestingHelper,
  RelativePathResembleHelper,
} = require('../helpers/index');

require('dotenv').config();

setHeadlessWhen(process.env.CI);

exports.config = {
  output: './output',
  timeout: WAIT_FOR.STEP, // applies to a single step definition, which should not take longer to run, than specified
  helpers: {
    CheckElementPresenceHelper,
    VisualTestingHelper,
    assertWrapper: {
      require: require.resolve('codeceptjs-assert'),
    },
    WebDriver: {
      browser: 'chrome',
      url: process.env.profile,
      coloredLogs: true,
      show: true,
      restart: true,
      host: process.env.host || 'hub',
      waitForTimeout: WAIT_FOR.ELEMENT, // wait for the element to reach the state (enabled, existing)
      timeouts: {
        pageLoad: WAIT_FOR.PAGE, // wait for the page loading to complete
      },
      smartWait: WAIT_FOR.IMPLICIT, // implicit wait set, when searching for a specific single element, is disables in all other cases (will wait for additional 5 sec)
      desiredCapabilities: {
        'goog:chromeOptions': {
          args: [
            '--disable-gpu',
            '--window-size=1500,1300',
            '--no-sandbox',
            '--disable-extensions',
            '--dns-prefetch-disable',
            '--disable-dev-shm-usage',
          ],
        },
      },
    },
    ResembleHelper: {
      require: RelativePathResembleHelper.require,
      screenshotFolder: './output/',
      relativeToHtmlScreenshotFolder: './',
      baseFolder: './output/tests/screenshots/base/',
      diffFolder: './output/tests/screenshots/diff/',
      relativeToHtmlBaseFolder: './tests/screenshots/base/',
      relativeToHtmlDiffFolder: './tests/screenshots/diff/',
    },
    Mochawesome: {
      uniqueScreenshotNames: 'true',
    },
  },
  mocha: {
    reporterOptions: {
      'codeceptjs-cli-reporter': {
        stdout: '-',
        options: {
          verbose: true,
          steps: true,
          debug: true,
        },
      },
      mochawesome: {
        stdout: './output/console.log',
        options: {
          steps: true,
          reportDir: './output',
          json: false,
          reportFilename: 'Automated_Test_Run_Report',
          inlineAssets: 'true',
          saveHtml: 'true',
          overwrite: 'true',
        },
      },
    },
  },
  bootstrap: null,
  teardown: null,
  hooks: [],
  gherkin: {
    features: './features/*.feature', // feature files location
    steps: './steps/*.js', // step definitions location
  },
  plugins: {
    screenshotOnFail: {
      enabled: true, // if true take screenshot of failed scenarios
      fullPageScreenshots: false,
    },
    retryFailedStep: {
      enabled: true, // if true rerun failed tests
      retries: 2,
      ignoredSteps: ['compareActualAndBaseScreenshots'],
    },
  },
  rerun: {
    // run 4 times until 1st success
    minSuccess: 1,
    maxReruns: 2,
  },
  name: 'codeceptTest',
};

Please suggest what could be wrong..

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions