이 프로젝트는 수천 시간의 시간을 투자하고 Apache License 2.0에 따라 소스 코드를 무료로 제공한 자원 봉사자들에 의해 가능해졌습니다.
이러한 Docker 이미지에는 사용을 단순화하기 위한 몇 가지 태그가 함께 제공됩니다. 릴리스 중 하나에서 살펴보세요.
새 릴리스에 대한 알림을 받으려면 자신을 "릴리스 전용" 감시자로 추가하세요.
이러한 이미지는 Selenium Docker Hub의 Docker Hub 레지스트리에 게시됩니다.
이러한 Docker 이미지를 사용하는 데 도움이 필요합니까? https://www.selenium.dev/support/에서 우리에게 문의하세요.
--shm-size="2g"
docker run -d -p 4444:4444 -p 7900:7900 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
WebDriver 테스트에서 http://localhost:4444를 가리키도록 하세요.
그게 다야!
(선택 사항) 컨테이너 내부에서 무슨 일이 일어나고 있는지 확인하려면 http://localhost:7900/?autoconnect=1&resize=scale&password=secret으로 이동하세요.
컨테이너 활동 시각화에 대한 자세한 내용은 디버깅 섹션을 확인하세요.
☝️ 브라우저가 포함된 이미지에 대해 docker run
실행할 때 --shm-size=2g
플래그를 사용하여 호스트의 공유 메모리를 사용하세요.
☝️ 특정 브라우저와 그리드 버전을 고정하려면 항상 전체 태그가 포함된 Docker 이미지를 사용하세요. 자세한 내용은 태그 지정 규칙을 참조하세요.
이미지 태그 기반 4.21.0
부터 이 프로젝트에서 지원하는 아키텍처는 다음과 같습니다.
건축학 | 사용 가능 |
---|---|
x86_64(일명 amd64) | ✅ |
aarch64(일명 arm64/armv8) | ✅ |
armhf(일명 arm32/armv7l) | ❌ |
멀티 아키텍처 이미지에서는 다음 브라우저를 사용할 수 있습니다.
건축학 | 크롬 | 크롬 | 파이어폭스 | 가장자리 |
---|---|---|---|---|
x86_64(일명 amd64) | ✅ | ✅ | ✅ | ✅ |
aarch64(일명 arm64/armv8) | ❌ | ✅ | ✅ | ❌ |
armhf(일명 arm32/armv7l) | ❌ | ❌ | ❌ | ❌ |
메모:
Google은 Linux/ARM 플랫폼용 Chrome( google-chrome
)을 구축하지 않습니다. 따라서 Chrome(노드 및 독립 실행형) 이미지는 AMD64에서만 사용할 수 있습니다. 마찬가지로 Microsoft는 Linux/ARM 플랫폼용 Edge( microsoft-edge
)를 구축하지 않습니다.
ARM64 플랫폼에서 에뮬레이션 하에 AMD64 이미지를 실행하는 것은 성능 및 안정성 문제로 인해 권장되지 않습니다.
Linux/ARM의 경우 오픈 소스 Chromium 브라우저를 사용하세요. Chromium(노드 및 독립 실행형) 이미지는 다중 아키텍처로 제공됩니다.
$ docker run --rm -it -p 4444:4444 -p 5900:5900 -p 7900:7900 --shm-size 2g selenium/standalone-chromium:latest
멀티 아키텍처 이미지는 Linux/ARM64 리소스 클래스를 사용하여 CircleCI에서 테스트되었습니다. 아래 상태를 확인하세요.
Apple M 시리즈 또는 Raspberry Pi와 같은 플랫폼에서 실행되는 실험적인 Docker 컨테이너 이미지의 경우 seleniumhq-community/docker-seleniarm의 저장소는 Seleniam Docker Hub 레지스트리에 게시되는 이미지를 제공했습니다.
이러한 이미지에 대한 자세한 내용은 문제 #1076을 참조하세요.
이제 포크 seleniumhq-community/docker-seleniarm이 병합되었습니다.
Docker 엔진에서 실험적 기능인 Containerd 이미지 저장소를 활성화하는 것이 좋습니다. containerd
단일 이미지 태그가 다양한 OS 및 하드웨어 아키텍처를 포괄하는 다양한 변형을 참조할 수 있는 다중 플랫폼 이미지를 이해합니다. 다양한 플랫폼에서 이미지를 구축, 저장 및 배포하는 프로세스를 단순화합니다.
Docker 엔진에서 해당 기능을 활성화하는 단일 명령은 다음과 같습니다.
make set_containerd_image_store
멀티플랫폼용 이미지를 모두 빌드하려면 다음 명령어를 실행하세요.
PLATFORMS=linux/amd64,linux/arm64 make build
특정 플랫폼에 대한 이미지를 빌드하려면 다음 명령을 실행하십시오.
PLATFORMS=linux/arm64 make build
기본적으로 PLATFORMS
변수를 지정하지 않으면 이미지는 linux/amd64
플랫폼용으로 빌드됩니다.
Nightly 이미지는 이 저장소의 메인 브랜치에 대한 최신 변경 사항이 포함된 업스트림 프로젝트 Selenium의 Nightly 빌드 위에 구축됩니다. 이미지 태그는 nightly
입니다. 프로덕션에서는 이미지를 사용하지 않는 것이 좋습니다. 테스트 목적으로만 사용됩니다.
$ docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:nightly
Nightly 이미지를 시작하려면 docker compose를 확인하세요 docker-compose-v3-full-grid-nightly.yml
테스트를 실행하거나 시험판 브라우저로 작업하기 위해 Google, Mozilla 및 Microsoft는 일반 대중에게 곧 출시될 제품을 확인해야 하는 사람들을 위해 개발 및 베타 릴리스 채널을 유지하고 있습니다.
독립형 모드에서 실행하는 방법은 다음과 같습니다.
크롬 베타:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:beta
크롬 개발자:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:dev
파이어폭스 베타:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-firefox:beta
Firefox 개발:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-firefox:dev
엣지 베타:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:beta
엣지 개발:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:dev
docker-compose-v3-beta-channel.yml:
# To execute this docker compose yml file use `docker compose -f docker-compose-v3-beta-channel.yml up`
# Add the `-d` flag at the end for detached execution
# To stop the execution, hit Ctrl+C, and then `docker compose -f docker-compose-v3-beta-channel.yml down`
version: " 3 "
services:
chrome:
image: selenium/node-chrome:beta
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
edge:
image: selenium/node-edge:beta
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
firefox:
image: selenium/node-firefox:beta
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium-hub:
image: selenium/hub:latest
container_name: selenium-hub
ports:
- " 4442:4442 "
- " 4443:4443 "
- " 4444:4444 "
도커-작성-v3-dev-channel.yml:
# To execute this docker compose yml file use `docker compose -f docker-compose-v3-dev-channel.yml up`
# Add the `-d` flag at the end for detached execution
# To stop the execution, hit Ctrl+C, and then `docker compose -f docker-compose-v3-dev-channel.yml down`
version: " 3 "
services:
chrome:
image: selenium/node-chrome:dev
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
edge:
image: selenium/node-edge:dev
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
firefox:
image: selenium/node-firefox:dev
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium-hub:
image: selenium/hub:latest
container_name: selenium-hub
ports:
- " 4442:4442 "
- " 4443:4443 "
- " 4444:4444 "
개발 및 베타 채널 컨테이너 이미지에 대한 자세한 내용은 Docker Selenium을 통한 개발 및 베타 채널 브라우저에 대한 블로그 게시물을 참조하세요.
파이어폭스
docker run -d -p 4444:4444 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
크롬
docker run -d -p 4444:4444 --shm-size= " 2g " selenium/standalone-chrome:4.26.0-20241101
가장자리
docker run -d -p 4444:4444 --shm-size= " 2g " selenium/standalone-edge:4.26.0-20241101
참고: 동시에 하나의 독립형 컨테이너만 포트 4444
에서 실행될 수 있습니다.
이미지를 실행하고 허브와 노드가 포함된 그리드를 생성하는 방법에는 여러 가지가 있습니다. 다음 옵션을 확인하세요.
허브와 노드는 동일한 네트워크에 생성되며 컨테이너 이름으로 서로를 인식합니다. 첫 번째 단계로 Docker 네트워크를 생성해야 합니다.
$ docker network create grid
$ docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-chrome:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-edge:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-firefox:4.26.0-20241101
$ docker network create grid
$ docker run - d - p 4442 - 4444 : 4442 - 4444 -- net grid -- name selenium - hub selenium / hub: 4.26 . 0 - 20241101
$ docker run - d -- net grid - e SE_EVENT_BUS_HOST = selenium - hub `
-- shm - size = " 2g " `
- e SE_EVENT_BUS_PUBLISH_PORT = 4442 `
- e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 `
selenium / node - chrome: 4.26 . 0 - 20241101
$ docker run - d -- net grid - e SE_EVENT_BUS_HOST = selenium - hub `
-- shm - size = " 2g " `
- e SE_EVENT_BUS_PUBLISH_PORT = 4442 `
- e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 `
selenium / node - edge: 4.26 . 0 - 20241101
$ docker run - d -- net grid - e SE_EVENT_BUS_HOST = selenium - hub `
-- shm - size = " 2g " `
- e SE_EVENT_BUS_PUBLISH_PORT = 4442 `
- e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 `
selenium / node - firefox: 4.26 . 0 - 20241101
그리드 사용을 마치고 컨테이너가 종료되면 다음 명령을 사용하여 네트워크를 제거할 수 있습니다.
# Removes the grid network
$ docker network rm grid
허브와 노드는 서로 다른 시스템/VM에 생성되므로 제대로 통신하려면 서로의 IP를 알아야 합니다. 동일한 컴퓨터/VM에서 둘 이상의 노드가 실행되는 경우 서로 다른 포트를 노출하도록 구성해야 합니다.
$ docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:4.26.0-20241101
$ docker run -d -p 5555:5555 --shm-size= " 2g " -e SE_EVENT_BUS_HOST= < ip-from-machine- 1> -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST= < ip-from-machine- 2> selenium/node-chrome:4.26.0-20241101
$ docker run - d - p 5555 : 5555 ` -- shm - size = " 2g " ` - e SE_EVENT_BUS_HOST = < ip - from - machine - 1> ` - e SE_EVENT_BUS_PUBLISH_PORT = 4442 ` - e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 ` - e SE_NODE_HOST = < ip - from - machine - 2> ` selenium / node - chrome: 4.26 . 0 - 20241101
$ docker run -d -p 5555:5555 --shm-size= " 2g " -e SE_EVENT_BUS_HOST= < ip-from-machine- 1> -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST= < ip-from-machine- 3> selenium/node-edge:4.26.0-20241101
$ docker run - d - p 5555 : 5555 ` -- shm - size = " 2g " ` - e SE_EVENT_BUS_HOST = < ip - from - machine - 1> ` - e SE_EVENT_BUS_PUBLISH_PORT = 4442 ` - e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 ` - e SE_NODE_HOST = < ip - from - machine - 3> ` selenium / node - edge: 4.26 . 0 - 20241101
$ docker run -d -p 5555:5555 --shm-size= " 2g " -e SE_EVENT_BUS_HOST= < ip-from-machine- 1> -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST= < ip-from-machine- 4> selenium/node-firefox:4.26.0-20241101
$ docker run - d - p 5555 : 5555 ` -- shm - size = " 2g " ` - e SE_EVENT_BUS_HOST = < ip - from - machine - 1> ` - e SE_EVENT_BUS_PUBLISH_PORT = 4442 ` - e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 ` - e SE_NODE_HOST = < ip - from - machine - 4> ` selenium / node - firefox: 4.26 . 0 - 20241101
$ docker run -d -p 5556:5556 --shm-size= " 2g " -e SE_EVENT_BUS_HOST= < ip-from-machine- 1> -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST= < ip-from-machine- 4> -e SE_NODE_PORT=5556 selenium/node-chrome:4.26.0-20241101
$ docker run - d - p 5556 : 5556 ` -- shm - size = " 2g " ` - e SE_EVENT_BUS_HOST = < ip - from - machine - 1> ` - e SE_EVENT_BUS_PUBLISH_PORT = 4442 ` - e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 ` - e SE_NODE_HOST = < ip - from - machine - 4> ` - e SE_NODE_PORT = 5556 ` selenium / node - chrome: 4.26 . 0 - 20241101
Docker Compose는 그리드를 시작하는 가장 간단한 방법입니다. 아래 링크된 리소스를 활용하여 로컬에 저장하고 각 파일 상단에서 실행 지침을 확인하세요.
docker-compose-v2.yml
docker-compose-v3.yml
Grid를 중지하고 생성된 컨테이너를 정리하려면 docker compose down
실행하세요.
docker-compose-v3-swarm.yml
모든 구성요소를 분리한 상태에서 Selenium Grid를 시작할 수 있습니다. 단순화를 위해 docker compose를 사용한 예만 제공됩니다. 파일을 로컬에 저장하고 그 위에 실행 지침을 확인하세요.
docker-compose-v3-full-grid.yml
환경변수 | 옵션 | 유형 | 기본값 | 설명 |
---|---|---|---|---|
SE_REJECT_UNSUPPORTED_CAPS | --reject-unsupported-caps | 부울 | false | 그리드가 요청된 기능을 지원하지 않는 경우 배포자가 요청을 즉시 거부할 수 있도록 허용합니다. |
SE_HEALTHCHECK_INTERVAL | --healthcheck-interval | 정수 | 120 | 이렇게 하면 서버가 일정 간격 후에 모든 노드를 성공적으로 ping할 수 있습니다. |
테스트 실행은 selenium/video:ffmpeg-7.1-20241101
Docker 이미지를 사용하여 기록할 수 있습니다. 브라우저가 실행되는 각 컨테이너마다 하나의 컨테이너가 필요합니다. 즉, 5개의 노드/독립형 컨테이너를 실행하는 경우 5개의 비디오 컨테이너가 필요하며 매핑은 1-1입니다.
현재 이 매핑을 수행하는 유일한 방법은 수동으로 수행하는 것입니다(컨테이너를 수동으로 시작하거나 docker compose
통해 시작). 우리는 이 프로세스를 반복하고 있으며 아마도 이 설정은 앞으로 더 간단해질 것입니다.
우리가 제공하는 비디오 Docker 이미지는 jrottenberg/ffmpeg 프로젝트에서 제공하는 ffmpeg Ubuntu 이미지를 기반으로 합니다. 이 이미지를 제공하고 작업을 단순화해 주셔서 감사합니다.
이미지 태그 기반 4.20.0
부터 비디오 Docker 이미지는 멀티 플랫폼에서 이미지를 사용할 수 있으므로 linuxserver/docker-ffmpeg 프로젝트에서 제공하는 FFmpeg Ubuntu 이미지를 기반으로 합니다. 프로젝트를 단순화하고 다양한 아키텍처 지원을 통해 앞으로 나아갈 수 있도록 도와주셔서 감사합니다.
참고 사항 :
/videos
디렉터리에 저장됩니다. 비디오를 얻으려면 로컬 디렉토리를 매핑하십시오.FILE_NAME
환경 변수를 통해 비디오 파일 이름을 덮어쓰십시오.이 예에서는 컨테이너를 수동으로 시작하는 방법을 보여줍니다.
$ docker network create grid
$ docker run -d -p 4444:4444 -p 6900:5900 --net grid --name selenium --shm-size= " 2g " selenium/standalone-chrome:4.26.0-20241101
$ docker run -d --net grid --name video -v /tmp/videos:/videos selenium/video:ffmpeg-7.1-20241101
# Run your tests
$ docker stop video && docker rm video
$ docker stop selenium && docker rm selenium
컨테이너가 중지되고 제거되면 머신의 /tmp/videos
디렉터리에 비디오 파일이 표시됩니다.
다음은 허브와 몇 개의 노드를 사용하는 예입니다.
docker-compose-v3-video.yml
테스트에서 메타데이터 지원을 기반으로 합니다. 비디오 레코더가 SE_VIDEO_FILE_NAME=auto
활성화하고 테스트에 메타데이터를 추가하여 브라우저 노드와 함께 배포된 사이드카인 경우 비디오 파일 이름은 se:name
기능의 값을 추출하여 비디오 파일 이름으로 사용합니다.
예를 들어 Python 바인딩에서는 다음과 같습니다.
from selenium . webdriver . chrome . options import Options as ChromeOptions
from selenium import webdriver
options = ChromeOptions ()
options . set_capability ( 'se:name' , 'test_visit_basic_auth_secured_page (ChromeTests)' )
driver = webdriver . Remote ( options = options , command_executor = "http://localhost:4444" )
driver . get ( "https://selenium.dev" )
driver . quit ()
출력 비디오 파일 이름은 test_visit_basic_auth_secured_page_ChromeTests_
입니다.
테스트 이름이 테스트 프레임워크에 의해 처리되고 확실히 고유한 경우 SE_VIDEO_FILE_NAME_SUFFIX=false
설정하여 비디오 파일 이름에 추가되는 세션 ID를 비활성화할 수도 있습니다.
긴 파일 이름을 피하기 위해 파일 이름은 255자로 잘립니다. 또한 space
문자는 _
로 대체되며 파일 이름에는 알파벳, 숫자, -
(하이픈), _
(밑줄) 문자만 유지됩니다.
자르기 정규식은 SE_VIDEO_FILE_NAME_TRIM_REGEX
환경 변수를 설정하여 사용자 정의할 수 있습니다. 기본값은 [:alnum:]-_
입니다. 정규식은 bash의 tr
명령과 호환되어야 합니다.
배포 수준에서 레코더 컨테이너는 항상 작동 중입니다. 또한 세션 기능 se:recordVideo
통해 비디오 녹화 프로세스를 비활성화할 수 있습니다. 예를 들어 Python 바인딩에서는 다음과 같습니다.
options . set_capability ( 'se:recordVideo' , False )
레코더 컨테이너에서는 비디오 녹화 프로세스 시작 여부를 결정하기 전에 Node SessionId를 기반으로 허브에서 GraphQL 쿼리를 수행하고 기능에서 se:recordVideo
값을 추출합니다.
참고: GraphQL 엔드포인트에 도달하려면 레코더 컨테이너가 허브 URL을 알아야 합니다. 허브 URL은 환경 변수 SE_NODE_GRID_URL
통해 전달될 수 있습니다. 예를 들어 SE_NODE_GRID_URL
http://selenium-hub:4444
입니다.
RCLONE은 비디오 레코더 이미지에 설치됩니다. 이를 사용하여 비디오를 클라우드 스토리지 서비스에 업로드할 수 있습니다. 위에서 언급한 비디오 녹화 외에도 다음 환경 변수를 설정하여 업로드 기능을 활성화할 수 있습니다.
version : " 3 "
services :
chrome_video :
image : selenium/video:ffmpeg-7.1-20241101
depends_on :
- chrome
environment :
- DISPLAY_CONTAINER_NAME=chrome
- SE_VIDEO_FILE_NAME=auto
- SE_VIDEO_UPLOAD_ENABLED=true
- SE_UPLOAD_DESTINATION_PREFIX=s3://mybucket/path
- RCLONE_CONFIG_S3_TYPE=s3
- RCLONE_CONFIG_S3_PROVIDER=GCS
- RCLONE_CONFIG_S3_ENV_AUTH=true
- RCLONE_CONFIG_S3_REGION=asia-southeast1
- RCLONE_CONFIG_S3_LOCATION_CONSTRAINT=asia-southeast1
- RCLONE_CONFIG_S3_ACL=private
- RCLONE_CONFIG_S3_ACCESS_KEY_ID=xxx
- RCLONE_CONFIG_S3_SECRET_ACCESS_KEY=xxx
- RCLONE_CONFIG_S3_ENDPOINT=https://storage.googleapis.com
- RCLONE_CONFIG_S3_NO_CHECK_BUCKET=true
SE_VIDEO_FILE_NAME=auto
세션 ID를 비디오 파일 이름으로 사용합니다. 이렇게 하면 업로드할 동영상 파일 이름이 고유해집니다. 비디오 파일 이름 구성은 노드 엔드포인트 /status
(및 선택적 GraphQL 엔드포인트)를 기반으로 자동으로 작동하여 세션 ID, 기능을 가져옵니다.
SE_VIDEO_UPLOAD_ENABLED=true
비디오 업로드 기능을 활성화합니다. 백그라운드에서는 업로더가 사용하고 진행할 수 있는 파일과 대상이 포함된 파이프파일을 생성합니다.
SE_VIDEO_INTERNAL_UPLOAD=true
업로드를 위해 컨테이너에 설치된 RCLONE을 사용합니다. 업로드에 다른 사이드카 컨테이너를 사용하려면 false
로 설정하세요.
모드별 ENV 변수 | 허브/노드 | 독립형 역할 | 동적 그리드 |
---|---|---|---|
SE_VIDEO_RECORD_STANDALONE (필수) | false (기본값) | true | true |
DISPLAY_CONTAINER_NAME (필수) | 사용자 입력 | 사용자 입력 | (필수는 아님) |
SE_NODE_PORT (선택사항) | 5555 | 4444 | (필수는 아님) |
SE_NODE_GRID_URL (선택사항) | 사용자 입력 | (필수는 아님) | (필수는 아님) |
접두사가 있는 환경 변수의 경우 RCLONE_
원격 구성을 RCLONE에 전달하는 데 사용됩니다. RCLONE 구성에 대한 자세한 내용은 여기에서 확인할 수 있습니다. Dynamic Grid에서 사용할 때 해당 변수는 SE_
접두사와 결합되어야 합니다(예: SE_RCLONE_
. 자세한 내용은 아래 참고자료를 확인하세요.
허브 및 노드에 대한 비디오 녹화 및 업로드 구성: docker-compose-v3-video-upload.yml
독립형 역할에 대한 비디오 녹화 및 업로드 구성: docker-compose-v3-video-upload-standalone.yml
Dynamic Grid(node-docker)에 대한 비디오 녹화 및 업로드 구성: docker-compose-v3-video-upload-dynamic-grid.yml
Dynamic Grid 독립형(standalone-docker)에 대한 비디오 녹화 및 업로드 구성: 테스트/docker-compose-v3-test-standalone-docker.yaml
환경변수 | 기본값 | 설명 |
---|---|---|
SE_UPLOAD_RETAIN_LOCAL_FILE | false | 성공적으로 업로드한 후 로컬 파일 유지 |
SE_UPLOAD_COMMAND | copy | RCLONE 명령은 파일을 전송하는 데 사용됩니다. 로컬 파일 유지가 false 인 경우 move 적용 |
SE_UPLOAD_OPTS | -P --cutoff-mode SOFT --metadata --inplace | RCLONE 명령에 속하는 다른 옵션을 설정할 수 있습니다. |
SE_UPLOAD_CONFIG_FILE_NAME | upload.conf | env 변수 접두사 SE_RCLONE_*를 통해 설정하는 대신 원격 호스트에 대한 구성 파일 |
SE_UPLOAD_CONFIG_DIRECTORY | /opt/bin | config 파일의 디렉터리(다른 디렉터리의 conf 파일이 마운트되면 변경) |
Grid 4에는 요청 시 Docker 컨테이너를 시작할 수 있는 기능이 있습니다. 즉, 각 새 세션 요청에 대해 백그라운드에서 Docker 컨테이너를 시작하고 그곳에서 테스트가 실행되며 테스트가 완료되면 컨테이너가 폐기됩니다.
이 실행 모드는 독립형 또는 노드 역할에서 사용할 수 있습니다. 컨테이너가 시작될 때 사용할 Docker 이미지를 "동적" 실행 모드에 알려야 합니다. 또한 Grid는 Docker 데몬의 URI를 알아야 합니다. 이 구성은 로컬 toml
파일에 배치될 수 있습니다.
이 파일을 로컬에 저장하고 이름을 config.toml
과 같이 지정할 수 있습니다.
[ docker ] # Configs have a mapping between the Docker image to use and the capabilities that need to be matched to # start a container with the given image. configs = [ " selenium/standalone-firefox:4.26.0-20241101 " , ' {"browserName": "firefox"} ' , " selenium/standalone-chrome:4.26.0-20241101 " , ' {"browserName": "chrome"} ' , " selenium/standalone-edge:4.26.0-20241101 " , ' {"browserName": "MicrosoftEdge"} ' ] host-config-keys = [ " Dns " , " DnsOptions " , " DnsSearch " , " ExtraHosts " , " Binds " ] # URL for connecting to the docker daemon # Most simple approach, leave it as http://127.0.0.1:2375, and mount /var/run/docker.sock. # 127.0.0.1 is used because internally the container uses socat when /var/run/docker.sock is mounted # If var/run/docker.sock is not mounted: # Windows: make sure Docker Desktop exposes the daemon via tcp, and use http://host.docker.internal:2375. # macOS: install socat and run the following command, socat -4 TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock, # then use http://host.docker.internal:2375. # Linux: varies from machine to machine, please mount /var/run/docker.sock. If this does not work, please create an issue. url = " http://127.0.0.1:2375 " # Docker image used for video recording video-image = " selenium/video:ffmpeg-7.1-20241101 " # Uncomment the following section if you are running the node on a separate VM # Fill out the placeholders with appropriate values # [server] # host =# port =
config.toml 파일의 [docker] 섹션(또는 CLI 옵션 --docker-host-config-keys) 아래에 선택적 구성 키인 host-config-keys
사용합니다. 사용자는 브라우저 컨테이너에 전달되어야 하는 Docker 호스트 구성 키 목록을 지정할 수 있습니다.
Docker 호스트 구성의 유효한 키 이름은 Docker API 문서에서 찾거나 docker inspect
node-docker 컨테이너 명령을 통해 찾을 수 있습니다.
Dynamic Grid 컨테이너의 볼륨 구성을 통해 노드 브라우저 컨테이너(예: /home/seluser/Downloads
)의 다운로드 디렉터리에 액세스하려는 경우 config.toml
파일에 다음 구성을 추가할 수 있습니다.
[ docker ]
host-config-keys = [ " Binds " ]
docker compose 파일의 볼륨 구성
services :
node-docker :
image : selenium/node-docker:latest
volumes :
- ./assets:/opt/selenium/assets
- ./config.toml:/opt/selenium/docker.toml
- ./downloads:/home/seluser/Downloads
- /var/run/docker.sock:/var/run/docker.sock
environment :
- SE_NODE_DOCKER_CONFIG_FILENAME=docker.toml
/opt/selenium/config.toml
은 모든 이미지의 구성 파일에 대한 기본 경로입니다. 볼륨 구성이 노드 브라우저 컨테이너에 공유되면 node-docker 컨테이너 구성 파일이 해당 config.toml
덮어쓸 수 있습니다.
이 경우 config.toml
파일을 node-docker 컨테이너의 /opt/selenium/docker.toml
에 마운트하세요. 그리고 환경 변수 SE_NODE_DOCKER_CONFIG_FILENAME=docker.toml
설정하여 시작 스크립트의 구성 파일 이름을 지정합니다.
docker-compose-v3-test-node-docker.yaml 예시를 참조하세요.
이는 모든 구성 요소가 개별적으로 배포되는 전체 그리드 배포로 확장될 수 있습니다. 전체적인 아이디어는 허브를 하나의 가상 머신에 두고 각 노드를 별도의 더욱 강력한 가상 머신에 두는 것입니다.
$ docker network create grid
$ docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
-v ${PWD} /config.toml:/opt/selenium/config.toml
-v ${PWD} /assets:/opt/selenium/assets
-v /var/run/docker.sock:/var/run/docker.sock
selenium/node-docker:4.26.0-20241101
$ docker network create grid
$ docker run - d - p 4442 - 4444 : 4442 - 4444 -- net grid -- name selenium - hub selenium / hub: 4.26 . 0 - 20241101
$ docker run - d -- net grid - e SE_EVENT_BUS_HOST = selenium - hub `
- e SE_EVENT_BUS_PUBLISH_PORT = 4442 `
- e SE_EVENT_BUS_SUBSCRIBE_PORT = 4443 `
- v ${PWD} / config.toml: / opt / selenium / config.toml `
- v ${PWD} / assets: / opt / selenium / assets `
- v / var / run / docker.sock: / var / run / docker.sock `
selenium / node - docker: 4.26 . 0 - 20241101
자산을 호스트에 저장하려면 호스트 경로를 /opt/selenium/assets
에 마운트하십시오.
그리드 사용을 마치고 컨테이너가 종료되면 다음 명령을 사용하여 네트워크를 제거할 수 있습니다.
# Removes the grid network
$ docker network rm grid
docker run --rm --name selenium-docker -p 4444:4444
-v ${PWD} /config.toml:/opt/selenium/config.toml
-v ${PWD} /assets:/opt/selenium/assets
-v /var/run/docker.sock:/var/run/docker.sock
selenium/standalone-docker:4.26.0-20241101
docker run --rm --name selenium-docker -p 4444:4444 `
-v ${PWD} /config.toml:/opt/selenium/config.toml `
-v ${PWD} /assets:/opt/selenium/assets `
-v /var/run/docker.sock:/var/run/docker.sock `
selenium/standalone-docker:4.26.0-20241101
$ docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:4.26.0-20241101
$ docker run -d -p 5555:5555
-e SE_EVENT_BUS_HOST= < ip-from-machine- 1>
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
-v ${PWD} /config.toml:/opt/selenium/config.toml
-v ${PWD} /assets:/opt/selenium/assets
-v /var/run/docker.sock:/var/run/docker.sock
selenium/node-docker:4.26.0-20241101
$ docker run -d -p 5555:5555 `
-e SE_EVENT_BUS_HOST= < ip-from-machine- 1> `
-e SE_EVENT_BUS_PUBLISH_PORT=4442 `
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 `
-v ${PWD} /config.toml:/opt/selenium/config.toml `
-v ${PWD} /assets:/opt/selenium/assets `
-v /var/run/docker.sock:/var/run/docker.sock `
selenium/node-docker:4.26.0-20241101
config.toml
파일에서 [server]
섹션을 완료합니다.
[ docker ] # Configs have a mapping between the Docker image to use and the capabilities that need to be matched to # start a container with the given image. configs = [ " selenium/standalone-firefox:4.26.0-20241101 " , " { " browserName " : " firefox " } " , " selenium/standalone-chrome:4.26.0-20241101 " , " { " browserName " : " chrome " } " , " selenium/standalone-edge:4.26.0-20241101 " , " { " browserName " : " MicrosoftEdge " } " ] # URL for connecting to the docker daemon # Most simple approach, leave it as http://127.0.0.1:2375, and mount /var/run/docker.sock. # 127.0.0.1 is used because interally the container uses socat when /var/run/docker.sock is mounted # If var/run/docker.sock is not mounted: # Windows: make sure Docker Desktop exposes the daemon via tcp, and use http://host.docker.internal:2375. # macOS: install socat and run the following command, socat -4 TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock, # then use http://host.docker.internal:2375. # Linux: varies from machine to machine, please mount /var/run/docker.sock. If this does not work, please create an issue. url = " http://127.0.0.1:2375 " # Docker image used for video recording video-image = " selenium/video:ffmpeg-7.1-20241101 " # Uncomment the following section if you are running the node on a separate VM # Fill out the placeholders with appropriate values [ server ] host = < ip-from-node-machine> port = < port-from-node-machine>
자산을 호스트에 저장하려면 호스트 경로를 /opt/selenium/assets
에 마운트하십시오.
다음은 허브와 노드를 사용하는 예입니다.
docker-compose-v3-dynamic-grid.yml
SE_NODE_SESSION_TIMEOUT
및 SE_OPTS
와 같은 환경 변수를 통해 컨테이너를 추가로 구성할 수 있습니다. 하위 컨테이너가 생성되면 SE_
접두사가 붙은 모든 환경 변수가 컨테이너에 전달되고 설정됩니다. standalone-docker
또는 node-docker
컨테이너에서 원하는 환경 변수를 설정할 수 있습니다. 다음 예에서는 모든 세션에 대해 세션 시간 초과를 700초로 설정합니다.
docker run --rm --name selenium-docker -p 4444:4444
-e SE_NODE_SESSION_TIMEOUT=700
-v ${PWD} /config.toml:/opt/selenium/config.toml
-v ${PWD} /assets:/opt/selenium/assets
-v /var/run/docker.sock:/var/run/docker.sock
selenium/standalone-docker:4.26.0-20241101
docker run --rm --name selenium-docker -p 4444:4444 `
-e SE_NODE_SESSION_TIMEOUT=700 `
-v ${PWD} /config.toml:/opt/selenium/config.toml `
-v ${PWD} /assets:/opt/selenium/assets `
-v /var/run/docker.sock:/var/run/docker.sock `
selenium/standalone-docker:4.26.0-20241101
WebDriver 세션을 녹화하려면 true
로 설정된 se:recordVideo
필드를 추가해야 합니다. 시간대와 화면 해상도를 설정할 수도 있습니다. 예를 들면 다음과 같습니다.
{
"browserName" : " firefox " ,
"platformName" : " linux " ,
"se:recordVideo" : " true " ,
"se:timeZone" : " US/Pacific " ,
"se:screenResolution" : " 1920x1080 "
}
테스트를 실행한 후 Docker 컨테이너에 마운트한 경로( ${PWD}/assets
)를 확인하면 동영상 및 세션 정보가 표시됩니다.
언어 바인딩에서 se:name
기능을 설정하여 출력 비디오 파일 이름을 동적으로 변경할 수 있습니다. 예를 들어 Python 바인딩에서는 다음과 같습니다.
from selenium . webdriver . chrome . options import Options as ChromeOptions
from selenium import webdriver
options = ChromeOptions ()
options . set_capability ( 'se:recordVideo' , True )
options . set_capability ( 'se:screenResolution' , '1920x1080' )
options . set_capability ( 'se:name' , 'test_visit_basic_auth_secured_page (ChromeTests)' )
driver = webdriver . Remote ( options = options , command_executor = "http://localhost:4444" )
driver . get ( "https://selenium.dev" )
driver . quit ()
테스트가 실행된 후 ( ${PWD}/assets
) 아래 /
경로에서 비디오 파일 이름을 볼 수 있습니다.
긴 파일 이름을 피하기 위해 파일 이름은 255자로 잘립니다. 또한 space
문자는 _
로 대체되며 파일 이름에는 알파벳, 숫자, -
(하이픈) 및 _
(밑줄) 문자만 유지됩니다. (이 위업은 이 PR이 병합되면 사용할 수 있습니다)
tzdata
기반 이미지에 설치되며, env 변수 TZ
사용하여 컨테이너에 시간대를 설정할 수 있습니다. 기본적으로 시간대는 UTC
로 설정됩니다. 지원되는 시간대 목록은 여기에서 확인할 수 있습니다. 예를 들어:
$ docker run --rm --entrypoint= " " -e TZ=Asia/Ho_Chi_Minh selenium/node-chromium:latest date +%FT%T%Z
2024-08-28T18:19:26+07
우리는 이러한 Docker 이미지를 Kubernetes에 배포하기 위한 Helm 차트를 제공합니다. Helm 추가 정보에서 자세한 내용을 읽어보세요.
허브 또는 노드를 시작하기 위한 추가 명령줄 매개변수와 함께 SE_OPTS
변수를 전달할 수 있습니다.
$ docker run -d -p 4444:4444 -e SE_OPTS= " --log-level FINE " --name selenium-hub selenium/hub:4.26.0-20241101
SE_JAVA_OPTS
환경 변수를 Java 프로세스에 전달할 수 있습니다.
$ docker run -d -p 4444:4444 -e SE_JAVA_OPTS=-Xmx512m --name selenium-hub selenium/hub:4.26.0-20241101
언어 바인딩의 브라우저 옵션을 통해 인수를 추가하는 대신 예를 들면 다음과 같습니다.
options = ChromeOptions ()
options . add_argument ( '--incognito' )
options . add_argument ( '--disable-dev-shm-usage' )
driver = webdriver . Remote ( options = options , command_executor = "http://localhost:4444/wd/hub" )
또한 (노드, 독립 실행형 또는 노드 도커) 컨테이너 환경 변수에서 직접 인수를 강제로 적용하도록 사전 예방적으로 수행할 수도 있습니다. 이름이 SE_BROWSER_ARGS_
로 시작하고 구성 키를 따르는 환경 변수를 정의하는 것은 귀하에게 달려 있습니다(여러 인수를 정의할 때 고유한지 확인하십시오). 예를 들어:
docker run -d -p 4444:4444
-e SE_BROWSER_ARGS_INCOGNITO=--incognito
-e SE_BROWSER_ARGS_DISABLE_DSHM=--disable-dev-shm-usage
selenium/standalone-chrome:latest
참조용으로 chromium 명령줄 인수를 나열하세요.
참고: 현재 이는 노드 브라우저 Chrome/Chromium, Edge에 적용됩니다.
노드는 이벤트 버스를 통해 자신을 등록합니다. 일반적인 허브/노드 설정에서 그리드가 시작되면 허브는 이벤트 버스 역할을 하며 그리드가 5개 요소를 모두 분리하여 시작되면 이벤트 버스가 자체적으로 실행됩니다.
두 경우 모두 노드에 이벤트 버스가 어디에 있는지 알려주어야 노드가 스스로 등록할 수 있습니다. 이것이 SE_EVENT_BUS_HOST
, SE_EVENT_BUS_PUBLISH_PORT
및 SE_EVENT_BUS_SUBSCRIBE_PORT
환경 변수의 목적입니다.
예를 들어 노드에 태그를 지정하려는 경우 노드 구성에 사용자 정의 스테레오타입을 제공해야 할 수도 있습니다. 환경 변수 SE_NODE_STEREOTYPE
노드의 config.toml
에 스테레오타입 항목을 설정합니다. config.toml 파일의 예는 특정 노드 일치를 위한 사용자 정의 기능 설정에서 찾을 수 있습니다.
다음은 이러한 환경 변수의 기본값을 사용한 예입니다.
$ docker run -d
-e SE_EVENT_BUS_HOST= < event_bus_ip | event_bus_name >
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_STEREOTYPE= " { " browserName " : " ${SE_NODE_BROWSER_NAME} " , " browserVersion " : " ${SE_NODE_BROWSER_VERSION} " , " platformName " : " Linux " } "
--shm-size= " 2g " selenium/node-chrome:4.26.0-20241101
WebDriver를 지원하는 서비스 엔드포인트에 명령을 릴레이합니다. WebDriver를 지원하는 외부 서비스를 Selenium Grid에 연결하는 것이 유용합니다. 이러한 서비스의 예로는 클라우드 공급자 또는 Appium 서버가 있을 수 있습니다. 이러한 방식으로 Grid는 로컬에 존재하지 않는 플랫폼과 버전에 더 많은 적용 범위를 제공할 수 있습니다.
다음은 구성 릴레이 명령의 예입니다.
docker-compose-v3-test-node-relay.yml
명령만 전달하려는 경우 selenium/node-base
이 목적에 적합하고 가볍습니다. 브라우저와 릴레이 명령을 모두 사용하여 노드를 구성하려는 경우 해당 노드 이미지를 사용할 수 있습니다.
릴레이 구성 생성을 위해 환경 변수를 사용하려면 SE_NODE_RELAY_URL
및 기타 변수를 아래와 같이 설정하십시오.
[ relay ]
url = " ${SE_NODE_RELAY_URL} "
status-endpoint = " ${SE_NODE_RELAY_STATUS_ENDPOINT} "
protocol-version = " ${SE_NODE_RELAY_PROTOCOL_VERSION} "
configs = [ ' ${SE_NODE_RELAY_MAX_SESSIONS} ' , ' {"browserName": "${SE_NODE_RELAY_BROWSER_NAME}", "platformName": "${SE_NODE_RELAY_PLATFORM_NAME}", "appium:platformVersion": "${SE_NODE_RELAY_PLATFORM_VERSION}"} ' ]
릴레이된 노드로 샘플 테스트를 실행하려면 프로젝트를 복제하고 아래 명령을 시도해 보세요.
make test_node_relay
기본적으로 Selenium은 http://127.0.0.1:4444/
에서 연결할 수 있습니다. SE_SUB_PATH
환경 변수를 지정하여 사용자 정의 하위 경로를 사용하도록 Selenium을 구성할 수 있습니다. 아래 예에서 Selenium은 http://127.0.0.1:4444/selenium-grid/
에서 연결할 수 있습니다.
$ docker run -d -p 4444:4444 -e SE_SUB_PATH=/selenium-grid/ --name selenium-hub selenium/hub:4.26.0-20241101
기본적으로 노드는 1920 x 1080 화면 해상도, 색상 깊이 24비트, dpi 96으로 시작합니다. 이러한 설정은 컨테이너를 시작할 때 SE_SCREEN_WIDTH
, SE_SCREEN_HEIGHT
, SE_SCREEN_DEPTH
및/또는 SE_SCREEN_DPI
환경 변수를 지정하여 조정할 수 있습니다.
docker run -d -e SE_SCREEN_WIDTH=1366 -e SE_SCREEN_HEIGHT=768 -e SE_SCREEN_DEPTH=24 -e SE_SCREEN_DPI=74 selenium/standalone-firefox:4.26.0-20241101
일부 사용 사례에서는 BiDi/CDP 엔드포인트에 액세스하려는 경우와 같이 그리드 URL을 노드로 설정해야 할 수도 있습니다. 이는 Selenium 4에 있는 새로운 RemoteWebDriver.builder()
또는 Augmenter()
사용하려는 경우에도 필요합니다(BiDi/CDP 연결을 암시적으로 설정하기 때문). SE_NODE_GRID_URL
환경 변수(예: -e SE_NODE_GRID_URL=http://
를 통해 이를 수행할 수 있습니다. 세션이 실행되는 동안 라이브 뷰를 보려면 이 환경 변수를 설정해야 합니다.
Grid의 기본 세션 시간 제한은 300초이며, 이 경우 세션은 종료될 때까지 오래된 상태에 있을 수 있습니다. SE_NODE_SESSION_TIMEOUT
사용하여 해당 값을 초 단위로 덮어쓸 수 있습니다.
새 세션 요청은 처리되기 전에 세션 큐에 배치되며 등록된 노드에서 일치하는 슬롯을 찾을 때까지 요청은 큐에 보관됩니다. 그러나 슬롯을 찾을 수 없으면 새 세션 요청이 시간 초과될 수 있습니다. 기본적으로 요청은 제한 시간에 도달하기 전 최대 300초 동안 대기열에 유지됩니다. 또한 요청 처리 시도는 5초마다 수행됩니다(기본값).
허브 및 SessionQueue( SE_SESSION_REQUEST_TIMEOUT
및 SE_SESSION_RETRY_INTERVAL
)의 환경 변수를 통해 해당 값을 재정의할 수 있습니다. 예를 들어, 시간 초과 500초는 SE_SESSION_REQUEST_TIMEOUT=500
이고 재시도 간격 2초는 SE_SESSION_RETRY_INTERVAL=2
입니다.
기본적으로 SE_NODE_MAX_SESSIONS
환경 변수를 통해 컨테이너당 하나의 세션만 실행되도록 구성됩니다. 해당 수를 사용 가능한 최대 프로세서까지 늘릴 수 있습니다. 이는 하나의 컨테이너/브라우저에 실행할 CPU가 1개 있을 때 더 많은 안정성이 달성되기 때문입니다.
그러나 성능을 측정하고 이를 기반으로 각 컨테이너에서 더 많은 세션을 실행할 수 있다고 생각되면 SE_NODE_MAX_SESSIONS
원하는 숫자로 설정하고 SE_NODE_OVERRIDE_MAX_SESSIONS
true
로 설정하여 최대 제한을 재정의할 수 있습니다. 그럼에도 불구하고 사용 가능한 프로세서보다 더 많은 브라우저 세션을 실행하면 리소스에 과부하가 걸리기 때문에 권장되지 않습니다.
둘 이상의 브라우저 세션이 동일한 비디오에서 캡처될 수 있으므로 비디오 녹화가 활성화된 경우 이 설정을 재정의하면 원하지 않는 부작용이 발생합니다.
Firefox, Chrome, 헤드리스 모드를 사용하는 경우 Xvfb 서버를 시작할 필요가 없습니다.
서버 시작을 방지하려면 SE_START_XVFB
환경 변수를 false
(또는 true
이외의 다른 값)로 설정할 수 있습니다. 예를 들면 다음과 같습니다.
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub -e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_START_XVFB=false --shm-size= " 2g " selenium/node-chrome:4.26.0-20241101
자세한 내용은 이 GitHub 문제를 참조하세요.
유명한:
--headless=new
모드에서 실행하려면 SE_START_XVFB
true
로 설정해야 합니다. Docker Swarm 또는 Kubernetes와 같은 일부 환경에서는 N 테스트를 실행한 후 노드 또는 독립 실행형 컨테이너를 종료하는 것이 유용합니다. 예를 들어 Kubernetes에서 이를 사용하여 포드를 종료한 다음 N 세션 후에 새 포드를 확장할 수 있습니다. 이 동작을 활성화하려면 환경 변수 SE_DRAIN_AFTER_SESSION_COUNT
0보다 큰 값으로 설정하십시오.
$ docker run -e SE_DRAIN_AFTER_SESSION_COUNT=5 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
이전 명령을 사용하면 5개의 세션이 실행된 후 독립 실행형 컨테이너가 종료됩니다.
장기 실행 컨테이너에서는 브라우저가 일부 남은 부분을 남길 수 있습니다. 이는 이미 완료되었지만 브라우저를 완전히 중지하지 못한 작업의 브라우저 프로세스 또는 /tmp
파일 시스템(특히 Chrome 기반 브라우저)에 작성된 임시 파일일 수 있습니다. 컨테이너의 프로세스 ID 및 파일 시스템 사용량과 같은 리소스가 가득 차는 것을 방지하기 위해 노드 컨테이너에서 매시간 실행되는 자동 정리 스크립트가 있습니다. 그러면 오래된 프로세스와 오래된 임시 파일이 정리됩니다. 기본적으로 이는 비활성화되어 있습니다. 활성화하면 2시간 이상 실행된 브라우저와 1일보다 오래된 파일이 정리됩니다. 이는 다음 환경 변수를 사용하여 활성화하고 조정할 수 있습니다.
SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP
: 기본값은 false
정리를 활성화하려면 true
로 설정합니다.SE_BROWSER_LEFTOVERS_INTERVAL_SECS
: 기본값은 3600
(1시간), 정리 간격(초)입니다.SE_BROWSER_LEFTOVERS_PROCESSES_SECS
: 기본값은 7200
(2시간), 이 시간보다 오랫동안 실행되는 브라우저는 종료됩니다.SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS
: 기본값은 1
(1일)이며, Chrome 기반 브라우저에서 /tmp
에 생성한 파일은 이 기간이 지나면 제거됩니다(Firefox를 사용하는 경우 무시됨). 장기 실행 세션에 Selenium을 사용하고 브라우저가 2시간 이상 실행될 것으로 예상되는 경우 SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP
true
로 설정하지 않거나(기본값은 false
로 유지) SE_BROWSER_LEFTOVERS_PROCESSES_SECS
조정하여 예상 장기 실행 값보다 높은 값을 설정하십시오. 브라우저 프로세스를 실행 중입니다.
$ docker run -e SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true --shm-size= " 2g " selenium/node-chrome:4.26.0-20241101
이전 명령을 사용하면 기본 타이밍으로 정리가 활성화됩니다.
$ docker run -e SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true
-e SE_BROWSER_LEFTOVERS_INTERVAL_SECS=7200
-e SE_BROWSER_LEFTOVERS_PROCESSES_SECS=3600
-e SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS=2
--shm-size= " 2g " selenium/node-chrome:4.26.0-20241101
이전 명령을 사용하면 정리가 활성화되지만 2시간마다 실행되고(1시간 대신) 1시간 이상 실행되는 브라우저가 종료되며(2시간 대신) 2일보다 오래된 임시 파일이 제거됩니다. 1).
비밀번호, 비밀 등과 같은 변수 출력은 콘솔 로그에서 마스킹됩니다. 디버깅 목적으로 SE_MASK_SECRETS
false
로 설정하여 비활성화할 수 있습니다.
Bash 스크립트를 생성하는 동안 echo "Current value is $(mask ${YOUR_VARIABLE})
구문을 사용하여 출력을 마스킹할 수 있습니다.
SE_MASK_SECRETS_MIN_LENGTH
기본값은 3
입니다. 이는 무차별 공격에 대한 길이 노출을 피하기 위해 긴 문자열이 ***
로 마스크됨을 의미합니다.
기본적으로 /opt/selenium/secrets
위치의 이미지에는 기본 자체 서명 인증서가 포함되어 있습니다.
server.jks
: 서버 시작 시 시스템 속성 javax.net.ssl.trustStore
통해 JVM에 대해 구성할 truststore 파일입니다.server.pass
: 파일에는 시스템 속성 javax.net.ssl.trustStorePassword
통해 JVM에 대한 신뢰 저장소 비밀번호가 포함되어 있습니다.tls.crt
: https 연결을 위한 서버 인증서가 Selenium 옵션 --https-certificate
으로 설정됩니다.tls.key
: https 연결을 위한 서버 개인 키(PKCS8 형식)가 Selenium 옵션 --https-private-key
로 설정됩니다.보안 연결을 구성하는 환경 변수가 있습니다.
환경 변수 | 기본 | 옵션 | 설명 |
---|---|---|---|
SE_ENABLE_TLS | false | 기본 구성으로 보안 연결 활성화 | |
SE_JAVA_SSL_TRUST_STORE | /opt/selenium/secrets/server.jks | JVM | |
SE_JAVA_SSL_TRUST_STORE_PASSWORD | /opt/selenium/secrets/server.pass | JVM | |
SE_JAVA_DISABLE_HOSTNAME_VERIFICATION | true | JVM | 내부적으로 구성요소에 대한 호스트 검사를 비활성화합니다. |
SE_HTTPS_CERTIFICATE | /opt/selenium/secrets/tls.crt | 셀렌 | CLI 옵션 --https-certificate 로 설정 |
SE_HTTPS_PRIVATE_KEY | /opt/selenium/secrets/tls.key | 셀렌 | CLI 옵션 --https-private-key 로 설정 |
볼륨 마운트를 통해 기본 인증서를 자체 인증서로 교체할 수 있습니다.
RemoteWebDriver를 생성할 때 SSL 핸드셰이크와 관련된 오류 메시지를 방지하려면 자체 서명된 인증서도 클라이언트에서 신뢰해야 합니다(신뢰할 수 있는 CA 번들 시스템에 추가).
샘플 참조: docker-compose-v3-full-grid-secure.yml
브라우저마다 바인딩에서 언어와 로케일을 설정하는 방법이 다릅니다.
바인딩에서 WebDriver를 생성할 때 프로필 기본 설정을 설정하여 특정 언어 및 로케일을 사용하도록 Firefox를 구성할 수 있습니다. 또한 브라우저 UI 언어를 적용하려면 언어 팩을 추가 기능으로 설치해야 합니다. 예를 들어 브라우저 언어와 로케일을 vi-VN
으로 설정하려면 다음 단계를 사용할 수 있습니다.
원하는 언어에 대한 최신 Firefox 언어 팩을 받으세요(예: https://download.mozilla.org/?product=firefox-langpack-latest-SSL&lang=vi). 그런 다음 RemoteWebDriver 인스턴스를 생성할 때 언어 팩을 추가 기능으로 설치할 수 있습니다.
profile = webdriver . FirefoxProfile ()
profile . set_preference ( 'intl.accept_languages' , 'vi-VN,vi' )
profile . set_preference ( 'intl.locale.requested' , 'vi-VN,vi' )
options = FirefoxOptions ()
options . profile = profile
driver = webdriver . Remote ( options = options , command_executor = "http://selenium-hub:4444/wd/hub" )
webdriver . Firefox . install_addon ( driver , "/local/path/to/vi.xpi" )
driver . get ( 'https://google.com' )
특정 Firefox 버전에 사용 가능한 모든 언어 팩을 가져오는 스크립트가 있습니다. 스크립트를 실행하여 소스에 언어 팩을 가져올 수 있습니다. 예를 들어:
FIREFOX_VERSION= $( docker run --rm --entrypoint= " " selenium/node-firefox:latest firefox --version | awk ' {print $3} ' )
&& ./NodeFirefox/get_lang_package.sh ${FIREFOX_VERSION} /local/path/to/download
또는 테스트 스크립트에서 사용하기 위해 컨테이너에 사전 구축된 액세스 팩에 대한 호스트 디렉터리에 컨테이너 디렉터리 /home/seluser/firefox/distribution/extensions
마운트할 수 있습니다.
Supervisor는 컨테이너의 프로세스와 로그를 관리하는 데 사용됩니다. 아래와 같이 환경 변수를 통해 supervisord
에 대한 몇 가지 구성을 설정할 수 있습니다.
환경 변수 | 기본 | supervisord 구성 |
---|---|---|
SE_SUPERVISORD_LOG_LEVEL | info | 감독자.로그수준 |
SE_SUPERVISORD_CHILD_LOG_DIR | /tmp | 감독자.childlogdir |
SE_SUPERVISORD_LOG_FILE | /tmp/supervisord.log | 감독자.로그 파일 |
SE_SUPERVISORD_PID_FILE | /tmp/supervisord.pid | 감독자.pid파일 |
저장소를 복제하고 프로젝트 디렉터리 루트에서 다음을 실행하여 모든 것을 빌드할 수 있습니다.
$ VERSION=local make build
이미지(예: http 프록시)를 빌드하기 위해 환경 변수를 구성해야 하는 경우 docker 컨텍스트에 전달할 추가 변수가 포함된 환경 변수 BUILD_ARGS
설정하기만 하면 됩니다(이는 docker >= 1.9에서만 작동함).
$ BUILD_ARGS= " --build-arg http_proxy=http://acme:3128 --build-arg https_proxy=http://acme:3128 " make build
참고: VERSION=local
생략하면 릴리스된 버전으로 이미지가 빌드되지만 현재 버전의 날짜는 대체됩니다.
호스트 UID/GID를 사용하여 이미지를 빌드하려면 환경 변수 BUILD_ARGS
설정하기만 하면 됩니다.
$ BUILD_ARGS= " --build-arg UID= $( id -u ) --build-arg GID= $( id -g ) " make build
다른 기본 사용자/비밀번호로 이미지를 빌드하려면 환경 변수 BUILD_ARGS
설정하면 됩니다.
$ BUILD_ARGS= " --build-arg SEL_USER=yourseluser --build-arg SEL_PASSWD=welcome " make build
최신 DockerFile (Repo를 복제하고 Project Directory Root의 클로닝)을 기반으로 셀레늄 그리드와 브라우저 버전의 특정 조합으로 이미지를 빌드 할 수 있습니다.
예를 들어, 그리드 기반 버전 4.17.0
, Chrome Browser 버전 119
, 120
, 123
사용하여 node-chrome
및 standalone-chrome
이미지를 구축하려고합니다.
$ ./tests/build-backward-compatible/bootstrap.sh 4.17.0 119,120,123 chrome
일반적으로 스크립트는 다음과 같은 주장을합니다.
$1
(필수) : 셀레늄 그리드 버전. 세부 사항은 Matrix 파일에서 가져 오는 것입니다$2
(필수) : 브라우저 메이저 버전, 쉼표로 여러 값을 구분합니다. 세부 사항은 Matrix 파일에서 가져 오는 것입니다$3
(선택 사항) : 브라우저 이름. 제공되지 않으면 모든 브라우저 ( chrome
, edge
, firefox
)를 반복합니다.$4
(선택 사항) : 이미지를 레지스트리로 푸시하십시오. 기본적으로 false
입니다. 이미지를 레지스트리로 푸시하려면 true
로 설정하십시오 (스크립트를 실행하기 전에 완료 한 네임 스페이스에 Docker 로그인). 이미지의 네임 스페이스를 설정하려면 스크립트를 실행하기 전에 환경 변수 NAME
설정할 수 있습니다. 예를 들어:
$ export NAME=artifactory.yourcompany.com/selenium
$ ./tests/build-backward-compatible/bootstrap.sh 4.17.0 119,120,123 chrome
스크립트를 실행 한 후에는 태깅 규칙에 따라 특정 그리드 및 브라우저 버전을 고정하기위한 전체 태그가있는 목록 이미지가 표시됩니다.
셀레늄 서버, 브라우저 및 드라이버는 이미지에 사전 설치되어 있습니다. 동일한 셀레늄 버전을 유지하고 브라우저와 드라이버를 최신으로 업그레이드하려는 경우. 아래 단계를 따라갈 수 있습니다
Repo를 복제하고 프로젝트 디렉토리 루트에서 실행하여 업그레이드 할 수 있습니다.
$ VERSION= $EXPECTED_SELENIUM_VERSION make chrome_upgrade_version
예를 들면 : VERSION=4.16.1 make chrome_upgrade_version
새 이미지에는 태그 $VERSION_YYYYMMDD
가 있습니다. 여기서 YYYYMMDD
현재 날짜입니다.
$ VERSION= $SELENIUM_VERSION make firefox_upgrade_version
$ VERSION= $SELENIUM_VERSION make edge_upgrade_version
makefile 파일에서 세부 명령을 참조 할 수 있습니다.
그리드가 올라가고 요청을받을 준비가되었는지 먼저 확인하는 것이 좋습니다 /wd/hub/status
endpoint를 확인하여 수행 할 수 있습니다.
허브와 두 개의 노드로 구성된 준비된 그리드는 다음과 같습니다.
{
"value" : {
"ready" : true ,
"message" : " Selenium Grid ready. " ,
"nodes" : [
{
"id" : " 6c0a2c59-7e99-469d-bbfc-313dc638797c " ,
"uri" : " http: u002fu002f 172.19.0.3:5555 " ,
"maxSessions" : 4 ,
"stereotypes" : [
{
"capabilities" : {
"browserName" : " firefox "
},
"count" : 4
}
],
"sessions" : [
]
},
{
"id" : " 26af3363-a0d8-4bd6-a854-2c7497ed64a4 " ,
"uri" : " http: u002fu002f 172.19.0.4:5555 " ,
"maxSessions" : 4 ,
"stereotypes" : [
{
"capabilities" : {
"browserName" : " chrome "
},
"count" : 4
}
],
"sessions" : [
]
}
]
}
}
"ready": true
값은 그리드가 요청을받을 준비가되었음을 나타냅니다. 이 상태는 테스트를 실행하기 전에 스크립트를 통해 투표 할 수 있거나 Docker 컨테이너가 시작될 때 건강 체크로 추가 할 수 있습니다.
이미지에 포함 된 스크립트 check-grid.sh는 그리드 상태를 폴링하는 데 사용할 수 있습니다.
이 예제는 15 초마다 그리드의 상태를 확인하고, 점검이 완료되면 시간 초과가 30 초이며, 컨테이너가 건강에 해로운 것으로 표시 될 때까지 최대 5 회 다시 시작합니다. 조정 된 값을 사용하여 귀하의 요구에 맞는 (필요한 경우) 환경에 사용 된 것의 --host
및 --port
매개 변수를 대체하십시오.
$ docker network create grid
$ docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub
--health-cmd= ' /opt/bin/check-grid.sh --host 0.0.0.0 --port 4444 '
--health-interval=15s --health-timeout=30s --health-retries=5
selenium/hub:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-chrome:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-edge:4.26.0-20241101
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-firefox:4.26.0-20241101
참고 : line delimiter는 Windows 기반 터미널에서 작동하지 않으며
^
또는 백 티크를 시도하십시오.
컨테이너 건강 상태는 docker ps
수행하고 (healthy)|(unhealthy)
상태를 확인하거나 다음과 같은 방식으로 검사하여 확인할 수 있습니다.
$ docker inspect --format= ' {{json .State.Health.Status}} ' selenium-hub
" healthy "
Docker에서 알려진 일반적인 문제는 실행중인 컨테이너가 항상 내부의 응용 프로그램이 준비되었음을 의미하지는 않는다는 것입니다. 이것을 다루는 간단한 방법은 "대기 중"스크립트를 사용하는 것입니다. 자세한 내용은 여기에서 볼 수 있습니다.
다음 스크립트는 BASH를 사용하여 수행 할 수있는 방법의 예이지만 테스트를 작성하는 데 사용되는 프로그래밍 언어로 동일한 원칙이 적용됩니다. 아래의 예에서 스크립트는 매 초마다 상태 끝점을 폴링합니다. 그리드가 30 초 이내에 준비되지 않으면 스크립트가 오류 코드로 종료됩니다.
#! /bin/bash
# wait-for-grid.sh
set -e
url= " http://localhost:4444/wd/hub/status "
wait_interval_in_seconds=1
max_wait_time_in_seconds=30
end_time= $(( SECONDS + max_wait_time_in_seconds ))
time_left= $max_wait_time_in_seconds
while [ $SECONDS -lt $end_time ] ; do
response= $( curl -sL " $url " | jq -r ' .value.ready ' )
if [ -n " $response " ] && [ " $response " ] ; then
echo " Selenium Grid is up - executing tests "
break
else
echo " Waiting for the Grid. Sleeping for $wait_interval_in_seconds second(s). $time_left seconds left until timeout. "
sleep $wait_interval_in_seconds
time_left= $(( time_left - wait_interval_in_seconds ))
fi
done
if [ $SECONDS -ge $end_time ] ; then
echo " Timeout: The Grid was not started within $max_wait_time_in_seconds seconds. "
exit 1
fi
apt-get
통해jq
설치해야합니다. 그렇지 않으면 스크립트가 실행을 완료하지 않고도 대기Waiting
계속합니다.
참고 : 필요한 경우 환경의 올바른 값에 대해 localhost
및 4444
교체하십시오. 또한이 스크립트는 무기한 폴링 중이며,이를 조정하고 타임 아웃을 설정하고 싶을 수도 있습니다.
테스트를 실행하기위한 일반 명령은 mvn clean test
라고 가정 해 봅시다. 다음은 위의 스크립트를 사용하고 테스트를 실행하는 방법입니다.
$ ./wait-for-grid.sh && mvn clean test
이와 마찬가지로, 스크립트는 그리드가 준비 될 때까지 투표하고 테스트가 시작됩니다.
기본적으로 기반 이미지는 libnss3-tools
로 설치되고 /home/seluser/.pki/nssdb
초기화하므로 CERT를 루트리스로 추가 할 수 있습니다. 사용자 정의 인증서, CA, 중간 CA 또는 클라이언트 인증서 (예 : 엔터프라이즈 내부 CA)를 설치 해야하는 경우 Selenium Node 이미지에서 고유 한 Docker 이미지를 만들 수 있습니다. Chromium 기반 브라우저는 nssdb
인증서 저장소로 사용합니다. 그런 다음 dockerfile에 필요한 모든 내부 인증서를 다음과 같이 설치할 수 있습니다.
이미지에는 nssdb
스토어 및 번들 CA에 인증서를 추가하는 데 사용할 수있는 유틸리티 스크립트가 있습니다. 스크립트는 /opt/bin/add-cert-helper.sh
입니다.
셀레늄 노드 이미지를베이스로 사용하는 도커 파일을 만들고 스크립트를 컨테이너에 복사하고 실행합니다. 예를 들어, dockerfile
다른 인증서와 노드 이미지 세트를 만들어야하는 경우. 원샷으로이를 수행하기 위해 부트 스트랩 스크립트를 만들 수 있습니다. 예를 들어, bootstrap.sh
위의 예는 다음 명령으로 테스트 할 수 있습니다.
make test_custom_ca_cert
# ./tests/customCACert/bootstrap.sh
여기에서는 추가 정보를 찾을 수 있습니다
이렇게하면 인증서가 설치되고 노드는 이전과 같이 자동으로 시작됩니다.
대안으로, 인증서 파일을 기존 셀레늄 이미지에 추가 할 수 있습니다. 이 실용적인 예는 빌드 이미지로 사용하는 알려진 이미지가 있다고 가정하고 로컬 Docker Registry에 새로운 이미지를 게시 할 수있는 방법이 있다고 가정합니다.
이 예제는 Redhat 기반 배포판을 빌드 이미지 (Rocky Linux)로 사용하지만 선택한 Linux 이미지가 될 수 있습니다. 빌드 명령은 분포마다 다릅니다. 이전 예제에서 우분투 지침을 확인할 수 있습니다.
이 예제는 또한 내부 CA가 이미 Rocky Linux의 기본 위치 인 /etc/pki/ca-trust/source/anchors/your_ca.pem 에 있다고 가정합니다. 또는 호스트에서 이러한 파일을 제공하여 빌드 이미지에 복사 할 수도 있습니다.
Chrome 및 Edge 브라우저의 경우 레시피는 동일하며 이미지 이름 (Node-Chrome 또는 Node-Edge)을 조정합니다.
# Get a standard image for creating nssdb file
FROM rockylinux:8.6 as build
RUN yum install -y nss-tools
RUN mkdir -p -m755 /seluser/.pki/nssdb
&& certutil -d sql:/seluser/.pki/nssdb -N --empty-password
&& certutil -d sql:/seluser/.pki/nssdb -A -t "C,," -n YOUR_CA -i /etc/pki/ca-trust/source/anchors/YOUR_CA.pem
&& chown -R 1200:1201 /seluser
# Start from Selenium image and add relevant files from build image
FROM selenium/node-chrome:4.26.0-20241101
USER root
COPY --from=build /seluser/ /home/seluser/
USER seluser
Firefox의 예 :
# Get a standard image for working on
FROM rockylinux:8.6 as build
RUN mkdir -p "/distribution" "/certs" &&
cp /etc/pki/ca-trust/source/anchors/YOUR_CA*.pem /certs/ &&
echo '{ "policies": { "Certificates": { "Install": ["/opt/firefox-latest/YOUR_CA.pem"] }} }' >"/distribution/policies.json"
# Start from Selenium image and add relevant files from build image
FROM selenium/node-firefox:4.26.0-20241101
USER root
COPY --from=build /certs /opt/firefox-latest
COPY --from=build /distribution /opt/firefox-latest/distribution
USER seluser
이 프로젝트는 X11VNC를 VNC 서버로 사용하여 사용자가 컨테이너 내부에서 발생하는 일을 검사 할 수 있도록합니다. 사용자는 두 가지 방법 으로이 서버에 연결할 수 있습니다.
VNC 서버는 Port 5900을 듣고 있으며 VNC 클라이언트를 사용하여 연결할 수 있습니다. 포트 5900을 원하는 무료 외부 포트에 자유롭게 매핑하십시오.
내부 5900 포트는 컨테이너 내부에서 실행되는 VNC 서버의 구성 포트이기 때문에 동일하게 유지됩니다. --net=host
사용하려는 경우 SE_VNC_PORT
환경 변수로 그것을 무시할 수 있습니다.
다음은 독립형 이미지의 예입니다. 동일한 개념이 노드 이미지에 적용됩니다.
$ docker run -d -p 4444:4444 -p 5900:5900 --shm-size= " 2g " selenium/standalone-chrome:4.26.0-20241101
$ docker run -d -p 4445:4444 -p 5901:5900 --shm-size= " 2g " selenium/standalone-edge:4.26.0-20241101
$ docker run -d -p 4446:4444 -p 5902:5900 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
그런 다음 VNC 클라이언트에서 사용합니다.
비밀번호를 묻는 프롬프트가 있으면 secret
입니다. 이를 변경하려면 환경 변수 SE_VNC_PASSWORD
설정할 수 있습니다.
비밀번호 인증없이 VNC를 실행하려면 환경 변수 SE_VNC_NO_PASSWORD=1
설정할 수 있습니다.
보기 전용 모드에서 VNC를 실행하려면 환경 변수 SE_VNC_VIEW_ONLY=1
설정할 수 있습니다.
VNC 서버 프로세스의 열린 파일 디스크립터 제한을 수정하려면 환경 변수 SE_VNC_ULIMIT=4096
설정할 수 있습니다.
이 프로젝트는 NOVNC를 사용하여 사용자가 브라우저에서 시각적으로 컨테이너 활동을 검사 할 수 있도록합니다. 컴퓨터에 VNC 클라이언트를 설치할 수없는 경우 유용 할 수 있습니다. 포트 7900은 NOVNC를 시작하는 데 사용되므로 브라우저와 해당 포트에 연결해야합니다.
이전 섹션과 마찬가지로 포트 7900을 원하는 무료 외부 포트에 자유롭게 매핑하십시오. --net=host
사용하려는 경우 SE_NO_VNC_PORT
환경 변수로 그것을 무시할 수도 있습니다.
다음은 독립형 이미지의 예입니다. 동일한 개념이 노드 이미지에 적용됩니다.
$ docker run -d -p 4444:4444 -p 7900:7900 --shm-size= " 2g " selenium/standalone-chrome:4.26.0-20241101
$ docker run -d -p 4445:4444 -p 7901:7900 --shm-size= " 2g " selenium/standalone-edge:4.26.0-20241101
$ docker run -d -p 4446:4444 -p 7902:7900 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
그런 다음 브라우저에서 사용합니다.
비밀번호를 묻는 프롬프트가 있으면 secret
입니다.
자원이 부족하거나 실행 세션을 검사 할 필요가없는 경우 VNC를 전혀 실행하지 않을 수 있습니다. 그리드 시작에서 SE_START_VNC=false
환경 변수를 설정하십시오.
셀레늄 그리드 컨테이너에서 추적을 활성화하기 위해 다음 명령을 실행할 수 있습니다.
docker network create grid
docker run -d -p 16686:16686 -p 4317:4317 --net grid --name jaeger jaegertracing/all-in-one:1.54
docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.26.0-20241101
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_ENABLE_TRACING=true
-e SE_OTEL_TRACES_EXPORTER=otlp
-e SE_OTEL_EXPORTER_ENDPOINT=http://jaeger:4317
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-chrome:4.26.0-20241101
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_ENABLE_TRACING=true
-e SE_OTEL_TRACES_EXPORTER=otlp
-e SE_OTEL_EXPORTER_ENDPOINT=http://jaeger:4317
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-edge:4.26.0-20241101
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub
--shm-size= " 2g "
-e SE_ENABLE_TRACING=true
-e SE_OTEL_TRACES_EXPORTER=otlp
-e SE_OTEL_EXPORTER_ENDPOINT=http://jaeger:4317
-e SE_EVENT_BUS_PUBLISH_PORT=4442
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium/node-firefox:4.26.0-20241101
아래 Docker Compose Yaml 파일을 참조하여 간단한 그리드 (또는) 동적 그리드를 시작할 수 있습니다.
Jaeger UI를보고 요청을 추적 할 수 있습니다.
기본적으로 추적은 그리드 구성 요소에서 활성화됩니다. 추적 수출 종말점이 없으면 로컬 인스턴스를 찾아 localhost/[0:0:0:0:0:0:0:1]:4117
찾습니다. 컨테이너 로그에서는 다음과 같은 몇 줄을 볼 수 있습니다.
ERROR (ThrottlingLogger.dolog) Failed to export spans.
The request could not be executed. Error message: Failed to connect to localhost/[0:0:0:0:0:0:0:1]:4117
java.net.ConnectException: Failed to connect to localhost/[0:0:0:0:0:0:0:1]:4317
at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:297)
at okhttp3.internal.connection. ExchangeFinder.findConnection (Exchangefinder.kt: 226)
at okhttp3.internal.connection.okhttps.internal.connection.RealConnection.connect(RealConnection.kt:207)
이 경우, 추적을 비활성화하기 위해 SE_ENABLE_TRACING=false
모든 구성 요소 컨테이너로 간단히 설정합니다 (각 구성 요소는 자체 트레이스를 내 보냅니다).
모든 출력이 stdout으로 전송되므로 실행을 통해 검사 할 수 있습니다.
$ docker logs -f < container-id | container-name >
환경 변수를 컨테이너로 전달하여 로그 출력을 늘릴 수 있습니다.
SE_OPTS="--log-level FINE"
--shm-size="2g"
--shm-size 2g
필요한 이유는 무엇입니까?
이것은 Docker 컨테이너 내부에서 브라우저가 충돌하는 것을 피하기위한 알려진 해결 방법입니다. Chrome 및 Firefox의 문서화 된 문제는 다음과 같습니다. 2GB의 SHM 크기는 임의적이지만 잘 작동하는 것으로 알려져 있습니다. 특정 사용 사례에는 다른 값이 필요할 수 있습니다. 필요에 따라이 값을 조정하는 것이 좋습니다.
다음 셀레늄 예외가 표시되면 :
Message: invalid argument: can't kill an exited process
또는
Message: unknown error: Chrome failed to start: exited abnormally
또는
[DriverServiceSessionFactory.apply] - Error while creating session with the driver service. Stopping driver service: java.util.concurrent.TimeoutException
그 이유는 SE_START_XVFB
환경을 false
로 설정했지만 실제로 헤드리스 모드에서 Firefox, Chrome 또는 Edge를 실행하는 것을 잊었 기 때문일 수 있습니다 .
일반적인 시나리오는 다운로드 된 파일을 검색하기 위해 브라우저 컨테이너에 볼륨을 장착하는 것입니다. 이것은 Windows 및 MacOS에서는 잘 작동하지만 Linux에는 해결 방법이 없습니다. 자세한 내용은이 잘 문서화 된 문제를 확인하십시오.
예를 들어 Linux를 사용하는 동안 다음과 같은 방식으로 컨테이너를 시작할 수 있습니다.
docker run -d -p 4444:4444 --shm-size= " 2g "
-v /home/ubuntu/files:/home/seluser/Downloads
selenium/standalone-chrome:4.26.0-20241101
호스트 /home/ubuntu/files
디렉토리를 컨테이너 내부 /home/seluser/Downloads
에 장착합니다 (기본 브라우저의 다운로드 디렉토리). 볼륨이 root
로 장착되기 때문에 문제가 발생합니다. 따라서 브라우저는 사용자 seluser
에서 실행되기 때문에 해당 디렉토리에 파일을 쓸 수 없습니다. 이것은 Docker가 Linux에서 볼륨을 장착하는 방식이기 때문에이 문제에 대한 자세한 내용이기 때문에 발생합니다.
이에 대한 해결 방법은 호스트에 디렉토리를 만들고 볼륨을 장착하기 전에 권한을 변경하는 것입니다. 사용자 권한에 따라 이러한 명령 중 일부에 sudo
사용해야 할 수도 있습니다.
mkdir /home/ubuntu/files
chown 1200:1201 /home/ubuntu/files
이 작업을 수행 한 후에는 파일을 마운트 디렉토리로 다운로드 할 수 있어야합니다. 더 나은 해결 방법이 있으면 풀 요청을 보내주십시오!
다운로드 된 파일을 검색하는 MOUNT VOLMES와 유사합니다. 비디오 파일의 경우 동일한 작업을 수행해야 할 수도 있습니다.
mkdir /tmp/videos
chown 1200:1201 /tmp/videos