简体   繁体   中英

Running Karate UI tests with “driverTarget” in GitLab CI

Question was: I would like to run Karate UI tests using the driverTarget options to test my Java Play app which is running locally during the same job with sbt run.

I have a simple assertion to check for a property but whenever the tests runs I keep getting "description":"TypeError: Cannot read property 'getAttribute' of null This is my karate-config.js:

if (env === 'ci') {
karate.log('using environment:', env);
karate.configure('driverTarget',
    {
        docker: 'justinribeiro/chrome-headless',
        showDriverLog: true
    });
}

This is my test scenario:

Scenario: test 1: some test Given driver 'http://localhost:9000'

  • waitUntil("document.readyState == 'complete'")
  • match attribute('some selector', 'some attribute') == 'something' My guess is that because justinribeiro/chrome-headless is running in its own container, localhost:9000 is different in the container compared to what's running outside of it.

Is there any workaround for this? thanks

A docker container cannot talk to localhost port as per what was posted: "My guess is that because justinribeiro/chrome-headless is running in its own container, localhost:9000 is different in the container compared to what's running outside of it."

To get around this and have docker container communicate with running app on localhost port use command host.docker.internal

Change to make:
From: Given driver 'http://localhost:9000' .
To: Given driver 'http://host.docker.internal:9000'

Additionally, I was able to use the ptrthomas/karate-chrome image in CI (GITLAB) by inserting the following inside my gitlab-ci.yml file

  stages:
    - uiTest

  featureOne:
    stage: uiTest
    image: docker:latest
    cache:
      paths:
        - .m2/repository/
    services:
      - docker:dind
script:
      - docker run --name karate --rm --cap-add=SYS_ADMIN -v "$PWD":/karate -v 
"$HOME"/.m2:/root/.m2 ptrthomas/karate-chrome &
      - sleep 45
      - docker exec -w /karate karate mvn test -DargLine='-Dkarate.env=docker' Dtest=testParallel
    allow_failure: true
    artifacts:
      paths:
        - reports
        - ${CLOUD_APP_NAME}.log


my karate-config.js file looks like
    if (karate.env == 'docker') {
        karate.configure('driver', {
            type: 'chrome',
            showDriverLog: true,
            start: false,
            beforeStart: 'supervisorctl start ffmpeg',
            afterStop: 'supervisorctl stop ffmpeg',
            videoFile: '/tmp/karate.mp4'
        });
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM