У нас есть набор тестов селена, в настоящее время выполняющий gitlab-ci с использованием docker / selenium.
Наш тест настроен на создание снимков экрана в случае сбоя теста.Эта функция работает правильно при запуске на локальном компьютере, но на gitlab-ci я не могу получить файл как артефакт.Я симпатичный производитель, мне не хватает либо правильного пути к каталогу, либо какого-то типа монтирования папок, но я не уверен, где я ошибаюсь.
Вот как у нас все настроено.
Dockerfile
FROM maven:3.5.4-jdk-8-alpine
COPY . /code
WORKDIR /code
Gitlab-ci.yml
seleniumtest:
image:
name: tmaier/docker-compose:latest
services:
- docker:dind
stage: test
before_script:
- pwd
- docker version
- docker-compose version
script:
- docker-compose -f ${hub} -f ${testname} build
- docker-compose -f ${hub} up -d --scale chrome=5
- docker-compose -f ${hub} -f ${testname} run test
artifacts:
name: "${CI_JOB_STAGE}_${CI_COMMIT_REF_NAME}"
paths:
- docker/screenshots
expire_in: 5 days
when: always
only:
- schedules
Seleniumhub.yml
version: "3.7"
services:
selenium-hub:
privileged: true
image: selenium/hub:3.141.59-vanadium
container_name: selenium-hub
ports:
- "4444:4444"
environment:
GRID_BROWSER_TIMEOUT: 300
GRID_TIMEOUT: 300
GRID_MAX_SESSION: 5
chrome:
privileged: true
image: selenium/node-chrome:3.141.59-vanadium
volumes:
- /dev/shm:/dev/shm
- ./Downloads:/home/seluser/downloads
- ./screenshots:/home/seluser/Screenshots
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- selenium-hub
environment:
NODE_MAX_INSTANCES: 5
NODE_MAX_SESSION: 5
SCREEN_WIDTH: 1920
SCREEN_HEIGHT: 1080
HUB_PORT_4444_TCP_ADDR: selenium-hub
HUB_PORT_4444_TCP_PORT: 4444
START_XVFB: "false"
ports:
- "5900"
links:
- selenium-hub
Код для получения ScreenShot
private void takeScreenshot(String className, String method, LocalTime timestamp) {
if (driver instanceof TakesScreenshot) {
TakesScreenshot screenshotTakingDriver = (TakesScreenshot) this.driver;
try {
File localScreenshots = new File(new File("docker"), "screenshots");
if (!localScreenshots.exists() || !localScreenshots.isDirectory()) {
localScreenshots.mkdirs();
}
String time = timestamp.getHour() + ":" + timestamp.getMinute();
File screenshot = new File(localScreenshots, className + "_" + method + "_" + time + ".png");
FileUtils.moveFile(screenshotTakingDriver.getScreenshotAs(OutputType.FILE), screenshot);
log.info("Screenshot saved in"+ " " + className+" "+ method +" "+ screenshot.getAbsolutePath());
} catch (Exception e) {
log.info("Unable to take screenshot "+ e.getMessage());
}
} else {
log.info("Driver '{}' can't take screenshots so skipping it. " + driver.getClass());
}
}
В журнале Ci при сбое теста я получаю это сообщение
Sep 26, 2019 8:50:44 PM testbase.TestBase takeScreenshot
INFO: Screenshot saved in Fail signUpAndOnBoardTest /code/docker/screenshots/******_20:50.png
Ожидается получить папку свсе скриншоты неудачных тестов.При первом размещении, возможно, пропустил руководство.Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.Заранее спасибо!