Proyek ini terwujud berkat kontributor sukarelawan yang telah meluangkan ribuan jam waktu mereka, dan membuat kode sumber tersedia secara gratis di bawah Lisensi Apache 2.0.
Gambar Docker ini dilengkapi dengan beberapa tag untuk menyederhanakan penggunaannya, lihat di salah satu rilis kami.
Untuk mendapatkan notifikasi rilis baru, tambahkan diri Anda sebagai pengamat "Rilis saja".
Gambar-gambar ini dipublikasikan ke registri Docker Hub di Selenium Docker Hub.
Apakah Anda memerlukan bantuan untuk menggunakan image Docker ini? Bicaralah dengan kami di 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
Arahkan pengujian WebDriver Anda ke http://localhost:4444
Itu saja!
(Opsional) Untuk melihat apa yang terjadi di dalam penampung, kunjungi http://localhost:7900/?autoconnect=1&resize=scale&password=secret.
Untuk detail lebih lanjut tentang memvisualisasikan aktivitas kontainer, periksa bagian Debugging.
☝️ Saat menjalankan docker run
untuk gambar yang berisi browser, harap gunakan flag --shm-size=2g
untuk menggunakan memori bersama host.
☝️ Selalu gunakan gambar Docker dengan tag lengkap untuk menyematkan browser dan versi Grid tertentu. Lihat Konvensi Pemberian Tag untuk detailnya.
Mulai dari tag gambar berbasis 4.21.0
dan seterusnya, arsitektur yang didukung oleh proyek ini adalah sebagai berikut:
Arsitektur | Tersedia |
---|---|
x86_64 (alias amd64) | ✅ |
aarch64 (alias arm64/armv8) | ✅ |
armhf (alias arm32/armv7l) | ❌ |
Browser berikut tersedia dalam gambar multi-lengkungan:
Arsitektur | krom | Kromium | Firefox | Tepian |
---|---|---|---|---|
x86_64 (alias amd64) | ✅ | ✅ | ✅ | ✅ |
aarch64 (alias arm64/armv8) | ❌ | ✅ | ✅ | ❌ |
armhf (alias arm32/armv7l) | ❌ | ❌ | ❌ | ❌ |
Catatan:
Google tidak membuat Chrome ( google-chrome
) untuk platform Linux/ARM. Oleh karena itu, gambar Chrome (node dan mandiri) hanya tersedia untuk AMD64. Demikian pula, Microsoft tidak membangun Edge ( microsoft-edge
) untuk platform Linux/ARM.
Menjalankan image AMD64 dengan emulasi pada platform ARM64 tidak disarankan karena masalah kinerja dan stabilitas.
Untuk Linux/ARM gunakan browser Chromium sumber terbuka. Gambar Chromium (node dan mandiri) tersedia dalam multi-lengkungan.
$ docker run --rm -it -p 4444:4444 -p 5900:5900 -p 7900:7900 --shm-size 2g selenium/standalone-chromium:latest
Gambar multi-lengkungan diuji pada CircleCI dengan kelas sumber daya Linux/ARM64. Lihat statusnya di bawah ini.
Untuk image kontainer buruh pelabuhan eksperimental, yang berjalan pada platform seperti Apple M-series atau Raspberry Pi, repositori di seleniumhq-community/docker-seleniarm menyediakan image yang dipublikasikan di registri Seleniarm Docker Hub.
Lihat edisi #1076 untuk informasi lebih lanjut mengenai gambar-gambar ini.
Sekarang, fork seleniumhq-community/docker-seleniarm telah digabungkan.
Kami menyarankan untuk mengaktifkan fitur eksperimental penyimpanan gambar containerd di Mesin Docker. containerd
memahami gambar multiplatform, di mana satu tag gambar dapat merujuk ke varian berbeda yang mencakup berbagai arsitektur OS dan perangkat keras. Ini menyederhanakan proses pembuatan, penyimpanan, dan distribusi gambar di berbagai platform.
Satu perintah untuk mengaktifkan fitur tersebut di Docker Engine:
make set_containerd_image_store
Untuk membuat semua image untuk multiplatform, jalankan perintah berikut:
PLATFORMS=linux/amd64,linux/arm64 make build
Untuk membuat image untuk platform tertentu, jalankan perintah berikut:
PLATFORMS=linux/arm64 make build
Secara default, tanpa menentukan variabel PLATFORMS
, image dibuat untuk platform linux/amd64
.
Gambar Nightly dibuat di atas build Nightly pada proyek hulu Selenium dengan perubahan terbaru pada cabang utama di repositori ini. Tag gambarnya nightly
. Hal ini tidak disarankan untuk menggunakan gambar dalam produksi. Ini hanya untuk tujuan pengujian.
$ docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:nightly
Lihat penulisan buruh pelabuhan untuk memulai dengan gambar Nightly docker-compose-v3-full-grid-nightly.yml
Untuk menjalankan pengujian atau bekerja dengan browser pra-rilis, Google, Mozilla, dan Microsoft mengelola saluran rilis Dev dan Beta bagi mereka yang ingin melihat apa yang akan segera dirilis ke masyarakat umum.
Berikut instruksi untuk menjalankannya dalam mode Standalone:
Chrome Beta:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:beta
Pengembang Chrome:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:dev
Firefox Beta:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-firefox:beta
Pengembang Firefox:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-firefox:dev
Tepi Beta:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:beta
Pengembang Tepi:
$ 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 "
docker-compose-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 "
Untuk informasi selengkapnya tentang gambar kontainer saluran Dev dan Beta, lihat postingan blog di Browser Saluran Dev dan Beta melalui Docker Selenium.
Firefox
docker run -d -p 4444:4444 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
krom
docker run -d -p 4444:4444 --shm-size= " 2g " selenium/standalone-chrome:4.26.0-20241101
Tepian
docker run -d -p 4444:4444 --shm-size= " 2g " selenium/standalone-edge:4.26.0-20241101
Catatan: Hanya satu kontainer Standalone yang dapat berjalan pada port 4444
secara bersamaan.
Ada berbagai cara untuk menjalankan gambar dan membuat Grid dengan Hub dan Node, periksa opsi berikut.
Hub dan Node akan dibuat di jaringan yang sama dan mereka akan mengenali satu sama lain dengan nama containernya. Jaringan Docker perlu dibuat sebagai langkah pertama.
$ 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
Ketika Anda selesai menggunakan Grid, dan container telah keluar, jaringan dapat dihapus dengan perintah berikut:
# Removes the grid network
$ docker network rm grid
Hub dan Node akan dibuat pada mesin/VM yang berbeda, mereka perlu mengetahui IP masing-masing agar dapat berkomunikasi dengan baik. Jika lebih dari satu node akan berjalan pada Mesin/VM yang sama, node tersebut harus dikonfigurasi untuk mengekspos port yang berbeda.
$ 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 adalah cara paling sederhana untuk memulai Grid. Gunakan sumber daya tertaut di bawah, simpan secara lokal dan periksa instruksi eksekusi di atas setiap file.
docker-compose-v2.yml
docker-compose-v3.yml
Untuk menghentikan Grid dan membersihkan kontainer yang dibuat, jalankan docker compose down
.
docker-compose-v3-swarm.yml
Dimungkinkan untuk memulai Selenium Grid dengan semua komponennya terpisah. Untuk mempermudah, hanya contoh dengan docker composer yang akan diberikan. Simpan file secara lokal, dan periksa instruksi eksekusi di atasnya.
docker-compose-v3-full-grid.yml
Variabel lingkungan | Pilihan | Jenis | Nilai bawaan | Keterangan |
---|---|---|---|---|
SE_REJECT_UNSUPPORTED_CAPS | --reject-unsupported-caps | boolean | false | Izinkan Distributor untuk segera menolak permintaan jika Grid tidak mendukung kemampuan yang diminta. |
SE_HEALTHCHECK_INTERVAL | --healthcheck-interval | ke dalam | 120 | Ini memastikan server dapat melakukan ping ke semua Node dengan sukses setelah suatu interval. |
Eksekusi pengujian dapat direkam dengan menggunakan image Docker selenium/video:ffmpeg-7.1-20241101
. Satu container diperlukan untuk setiap container tempat browser berjalan. Artinya jika Anda menjalankan 5 Node/Container Standalone, Anda memerlukan 5 container video, pemetaannya 1-1.
Saat ini, satu-satunya cara untuk melakukan pemetaan ini adalah secara manual (baik memulai container secara manual atau melalui docker compose
). Kami sedang mengulangi proses ini dan mungkin penyiapan ini akan lebih sederhana di masa mendatang.
Gambar video Docker yang kami sediakan didasarkan pada gambar ffmpeg Ubuntu yang disediakan oleh proyek jrottenberg/ffmpeg, terima kasih telah menyediakan gambar ini dan menyederhanakan pekerjaan kami?
Mulai dari tag gambar berbasis 4.20.0
dan seterusnya, gambar Docker video didasarkan pada gambar FFmpeg Ubuntu yang disediakan oleh proyek linuxserver/docker-ffmpeg karena gambar tersebut tersedia untuk multi-platform. Terima kasih telah menyederhanakan proyek kami dan membantu kami maju dengan dukungan berbagai arsitektur.
Catatan :
/videos
di dalam wadah video. Petakan direktori lokal untuk mendapatkan video.FILE_NAME
untuk menghindari hasil yang tidak diharapkan.Contoh ini menunjukkan cara memulai container secara manual:
$ 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
Setelah container dihentikan dan dihapus, Anda akan melihat file video di direktori /tmp/videos
mesin Anda.
Berikut ini contoh penggunaan Hub dan beberapa Node:
docker-compose-v3-video.yml
Berdasarkan dukungan Metadata dalam pengujian. Ketika perekam video disebarkan dengan node browser dengan mengaktifkan SE_VIDEO_FILE_NAME=auto
dan menambahkan metadata ke pengujian Anda, nama file video akan mengekstrak nilai kemampuan se:name
dan menggunakannya sebagai nama file video.
Misalnya dalam pengikatan 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 ()
Nama file video keluarannya adalah test_visit_basic_auth_secured_page_ChromeTests_
.
Jika nama pengujian Anda ditangani oleh kerangka pengujian, dan pastinya unik, Anda juga dapat menonaktifkan penambahan id sesi ke nama file video dengan menyetel SE_VIDEO_FILE_NAME_SUFFIX=false
.
Nama file akan dipangkas menjadi 255 karakter untuk menghindari nama file yang panjang. Selain itu, karakter space
akan diganti dengan _
dan hanya karakter huruf, angka, -
(tanda hubung), _
(garis bawah) yang dipertahankan dalam nama file.
Regex trim dapat dikustomisasi dengan mengatur variabel lingkungan SE_VIDEO_FILE_NAME_TRIM_REGEX
. Nilai defaultnya adalah [:alnum:]-_
. Regex harus kompatibel dengan perintah tr
di bash.
Pada tingkat penerapan, kontainer perekam selalu aktif. Selain itu, Anda dapat menonaktifkan proses perekaman video melalui kemampuan sesi se:recordVideo
. Misalnya dalam pengikatan Python:
options . set_capability ( 'se:recordVideo' , False )
Dalam wadah perekam akan melakukan kueri GraphQL di Hub berdasarkan Node SessionId dan mengekstrak nilai se:recordVideo
dalam kemampuan sebelum memutuskan untuk memulai proses perekaman video atau tidak.
Catatan: Untuk mencapai titik akhir GraphQL, kontainer perekam perlu mengetahui URL Hub. URL Hub dapat diteruskan melalui variabel lingkungan SE_NODE_GRID_URL
. Misalnya SE_NODE_GRID_URL
adalah http://selenium-hub:4444
.
RCLONE dipasang di gambar perekam video. Anda dapat menggunakannya untuk mengunggah video ke layanan penyimpanan cloud. Selain perekaman video yang disebutkan di atas, Anda dapat mengaktifkan fungsi unggahan dengan mengatur variabel lingkungan berikut:
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
akan menggunakan id sesi sebagai nama file video. Ini memastikan bahwa nama file video unik untuk diunggah. Konstruksi nama file video secara otomatis berfungsi berdasarkan titik akhir /status
Node (dan titik akhir GraphQL opsional) untuk mendapatkan ID sesi, kemampuan.
SE_VIDEO_UPLOAD_ENABLED=true
akan mengaktifkan fitur unggah video. Di latar belakang, ini akan membuat pipefile dengan file dan tujuan untuk digunakan dan dilanjutkan oleh pengunggah.
SE_VIDEO_INTERNAL_UPLOAD=true
akan menggunakan RCLONE yang dipasang di wadah untuk diunggah. Jika Anda ingin menggunakan wadah sespan lain untuk mengunggah, setel ke false
.
Variabel ENV per mode | Hub/Node | Peran yang berdiri sendiri | Jaringan Dinamis |
---|---|---|---|
SE_VIDEO_RECORD_STANDALONE (wajib) | false (standar) | true | true |
DISPLAY_CONTAINER_NAME (wajib) | masukan pengguna | masukan pengguna | (tidak wajib) |
SE_NODE_PORT (opsional) | 5555 | 4444 | (tidak wajib) |
SE_NODE_GRID_URL (opsional) | masukan pengguna | (tidak wajib) | (tidak wajib) |
Untuk variabel lingkungan dengan awalan RCLONE_
digunakan untuk meneruskan konfigurasi jarak jauh ke RCLONE. Anda dapat menemukan informasi lebih lanjut tentang konfigurasi RCLONE di sini. Saat menggunakan Dynamic Grid, variabel tersebut harus digabungkan dengan awalan SE_
, misalnya SE_RCLONE_
. Lihat referensi di bawah untuk lebih jelasnya.
Konfigurasikan perekaman dan pengunggahan video untuk Hub dan Node: docker-compose-v3-video-upload.yml
Konfigurasikan perekaman dan pengunggahan video untuk peran Mandiri: docker-compose-v3-video-upload-standalone.yml
Konfigurasikan perekaman dan pengunggahan video untuk Dynamic Grid (node-docker): docker-compose-v3-video-upload-dynamic-grid.yml
Konfigurasikan perekaman dan pengunggahan video untuk Dynamic Grid standalone (standalone-docker): test/docker-compose-v3-test-standalone-docker.yaml
Variabel lingkungan | Nilai bawaan | Keterangan |
---|---|---|
SE_UPLOAD_RETAIN_LOCAL_FILE | false | Simpan file lokal setelah berhasil diunggah |
SE_UPLOAD_COMMAND | copy | Perintah RCLONE digunakan untuk mentransfer file. Terapkan move ketika penyimpanan file lokal false |
SE_UPLOAD_OPTS | -P --cutoff-mode SOFT --metadata --inplace | Opsi lain milik perintah RCLONE dapat diatur. |
SE_UPLOAD_CONFIG_FILE_NAME | upload.conf | File konfigurasi untuk host jarak jauh alih-alih disetel melalui awalan variabel env SE_RCLONE_* |
SE_UPLOAD_CONFIG_DIRECTORY | /opt/bin | Direktori file config (ubah ketika file conf di direktori lain di-mount) |
Grid 4 memiliki kemampuan untuk memulai container Docker sesuai permintaan, ini berarti ia memulai container Docker di latar belakang untuk setiap permintaan sesi baru, pengujian dijalankan di sana, dan ketika pengujian selesai, container tersebut akan dibuang.
Mode eksekusi ini dapat digunakan dalam peran Standalone atau Node. Mode eksekusi "dinamis" perlu diberi tahu image Docker apa yang akan digunakan saat container dimulai. Selain itu, Grid perlu mengetahui URI daemon Docker. Konfigurasi ini dapat ditempatkan di file toml
lokal.
Anda dapat menyimpan file ini secara lokal dan memberi nama, misalnya, 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 =
Dengan kunci konfigurasi opsional host-config-keys
di bawah bagian [docker] dalam file config.toml (atau opsi CLI --docker-host-config-keys). Pengguna dapat menentukan daftar kunci konfigurasi host buruh pelabuhan yang harus diteruskan ke kontainer browser.
Nama kunci yang valid untuk konfigurasi host Docker dapat ditemukan di dokumentasi Docker API atau melalui perintah docker inspect
wadah node-docker.
Jika Anda ingin mengakses direktori unduhan di wadah browser simpul (mis. /home/seluser/Downloads
) melalui konfigurasi volume wadah Grid Dinamis, Anda dapat menambahkan konfigurasi berikut ke file config.toml
[ docker ]
host-config-keys = [ " Binds " ]
Konfigurasi volume dalam file penulisan buruh pelabuhan
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
adalah jalur default untuk file konfigurasi di semua gambar. Setelah konfigurasi volume dibagikan ke kontainer browser node, config.toml
-nya dapat ditimpa oleh file konfigurasi kontainer node-docker.
Dalam hal ini, pasang file config.toml
Anda ke /opt/selenium/docker.toml
di wadah node-docker. Dan atur variabel lingkungan SE_NODE_DOCKER_CONFIG_FILENAME=docker.toml
untuk menentukan nama file konfigurasi untuk skrip startup.
Lihat contoh docker-compose-v3-test-node-docker.yaml
Hal ini dapat diperluas ke penerapan Grid penuh, semua komponen diterapkan secara individual. Ide keseluruhannya adalah untuk memiliki Hub dalam satu mesin virtual, dan masing-masing Node dalam mesin virtual yang terpisah dan lebih kuat.
$ 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
Untuk menyimpan aset di host Anda, harap pasang jalur host Anda ke /opt/selenium/assets
.
Ketika Anda selesai menggunakan Grid, dan container telah keluar, jaringan dapat dihapus dengan perintah berikut:
# 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
Lengkapi bagian [server]
di file 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 " } " ] # 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>
Untuk menyimpan aset di host Anda, harap pasang jalur host Anda ke /opt/selenium/assets
.
Berikut ini contoh penggunaan Hub dan Node:
docker-compose-v3-dynamic-grid.yml
Kontainer dapat dikonfigurasi lebih lanjut melalui variabel lingkungan, seperti SE_NODE_SESSION_TIMEOUT
dan SE_OPTS
. Saat penampung anak dibuat, semua variabel lingkungan yang diawali dengan SE_
akan diteruskan dan disetel dalam penampung. Anda dapat mengatur variabel lingkungan yang diinginkan dalam wadah standalone-docker
atau node-docker
. Contoh berikut menetapkan batas waktu sesi menjadi 700 detik untuk semua sesi:
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
Untuk merekam sesi WebDriver, Anda perlu menambahkan bidang se:recordVideo
yang disetel ke true
. Anda juga dapat mengatur zona waktu dan resolusi layar, misalnya:
{
"browserName" : " firefox " ,
"platformName" : " linux " ,
"se:recordVideo" : " true " ,
"se:timeZone" : " US/Pacific " ,
"se:screenResolution" : " 1920x1080 "
}
Setelah menjalankan pengujian, periksa jalur yang Anda pasang ke kontainer Docker, ( ${PWD}/assets
), dan Anda akan melihat video dan informasi sesi.
Dari pengikatan bahasa, Anda dapat mengatur kemampuan se:name
untuk mengubah nama file video keluaran secara dinamis. Misalnya, dalam pengikatan 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 ()
Setelah pengujian dijalankan, di bawah ( ${PWD}/assets
) Anda dapat melihat nama file video di jalur /
Nama file akan dipangkas menjadi 255 karakter untuk menghindari nama file yang panjang. Selain itu, karakter space
akan diganti dengan _
, dan hanya karakter huruf, angka, -
(tanda hubung), dan _
(garis bawah) yang dipertahankan dalam nama file. (Prestasi ini tersedia setelah PR ini digabungkan)
tzdata
dipasang di gambar berbasis, dan Anda dapat mengatur zona waktu dalam wadah dengan menggunakan variabel env TZ
. Secara default, zona waktu diatur ke UTC
. Daftar zona waktu yang didukung dapat ditemukan di sini. Misalnya:
$ docker run --rm --entrypoint= " " -e TZ=Asia/Ho_Chi_Minh selenium/node-chromium:latest date +%FT%T%Z
2024-08-28T18:19:26+07
Kami menawarkan diagram Helm untuk menerapkan image Docker ini ke Kubernetes. Baca lebih detail di Helm readme.
Anda dapat meneruskan variabel SE_OPTS
dengan parameter baris perintah tambahan untuk memulai hub atau node.
$ docker run -d -p 4444:4444 -e SE_OPTS= " --log-level FINE " --name selenium-hub selenium/hub:4.26.0-20241101
Anda dapat meneruskan variabel lingkungan SE_JAVA_OPTS
ke proses Java.
$ docker run -d -p 4444:4444 -e SE_JAVA_OPTS=-Xmx512m --name selenium-hub selenium/hub:4.26.0-20241101
Daripada menambahkan argumen melalui opsi browser dari ikatan bahasa, misalnya:
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" )
Anda juga dapat proaktif untuk memaksa penerapan argumen langsung dari variabel lingkungan kontainer (simpul, mandiri, atau simpul-buruh pelabuhan). Tentukan variabel lingkungan dengan nama yang dimulai dengan SE_BROWSER_ARGS_
dan diikuti dengan kunci konfigurasi terserah Anda (pastikan unik saat Anda mendefinisikan beberapa argumen). Misalnya:
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
Cantumkan argumen baris perintah chromium untuk referensi Anda.
Catatan: Saat ini, ini berlaku untuk browser node Chrome/Chromium, Edge.
Node mendaftarkan dirinya melalui Bus Acara. Ketika Grid dimulai dengan pengaturan Hub/Node yang khas, Hub akan bertindak sebagai Bus Peristiwa, dan ketika Grid dimulai dengan kelima elemennya terpisah, Bus Peristiwa akan berjalan dengan sendirinya.
Dalam kedua kasus tersebut, Node perlu diberitahu di mana Bus Peristiwa berada, sehingga Node dapat mendaftarkan dirinya sendiri. Itulah tujuan dari variabel lingkungan SE_EVENT_BUS_HOST
, SE_EVENT_BUS_PUBLISH_PORT
dan SE_EVENT_BUS_SUBSCRIBE_PORT
.
Dalam beberapa kasus, misalnya, jika Anda ingin menandai sebuah node, mungkin perlu memberikan stereotip khusus ke konfigurasi node. Variabel lingkungan SE_NODE_STEREOTYPE
menyetel entri stereotip di config.toml
node. Contoh file config.toml dapat ditemukan di sini: Mengatur kemampuan khusus untuk mencocokkan Node tertentu.
Berikut ini contoh nilai default variabel lingkungan ini:
$ 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
Menyampaikan perintah ke titik akhir layanan yang mendukung WebDriver. Berguna untuk menghubungkan layanan eksternal yang mendukung WebDriver ke Selenium Grid. Contoh layanan tersebut dapat berupa penyedia cloud atau server Appium. Dengan cara ini, Grid dapat mengaktifkan lebih banyak cakupan pada platform dan versi yang tidak ada secara lokal.
Berikut contoh en perintah relay konfigurasi.
docker-compose-v3-test-node-relay.yml
Jika Anda ingin menyampaikan perintah saja, selenium/node-base
cocok dan ringan untuk tujuan ini. Jika Anda ingin mengonfigurasi node dengan browser dan perintah relai, masing-masing gambar node dapat digunakan.
Untuk menggunakan variabel lingkungan untuk menghasilkan konfigurasi relai, atur SE_NODE_RELAY_URL
dan variabel lainnya seperti di bawah ini
[ 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}"} ' ]
Untuk menjalankan pengujian sampel dengan node yang diteruskan, Anda dapat mengkloning proyek dan mencoba perintah di bawah ini:
make test_node_relay
Secara default, Selenium dapat dijangkau di http://127.0.0.1:4444/
. Selenium dapat dikonfigurasi untuk menggunakan subjalur khusus dengan menentukan variabel lingkungan SE_SUB_PATH
. Dalam contoh di bawah Selenium dapat dijangkau di 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
Secara default, node dimulai dengan resolusi layar 1920 x 1080 dengan kedalaman warna 24 bit dan dpi 96. Pengaturan ini dapat disesuaikan dengan menentukan variabel lingkungan SE_SCREEN_WIDTH
, SE_SCREEN_HEIGHT
, SE_SCREEN_DEPTH
, dan/atau SE_SCREEN_DPI
saat memulai penampung.
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
Dalam beberapa kasus penggunaan, Anda mungkin perlu mengatur URL Grid ke Node, misalnya, jika Anda ingin mengakses titik akhir BiDi/CDP. Ini juga diperlukan ketika Anda ingin menggunakan RemoteWebDriver.builder()
atau Augmenter()
baru yang ada di Selenium 4 (karena keduanya mengatur koneksi BiDi/CDP secara implisit). Anda dapat melakukannya melalui variabel lingkungan SE_NODE_GRID_URL
, misalnya -e SE_NODE_GRID_URL=http://
. Pengaturan env var ini diperlukan jika Anda ingin melihat tampilan langsung saat sesi sedang dijalankan.
Grid memiliki batas waktu sesi default sebesar 300 detik, yang mana sesi dapat berada dalam status basi hingga dihentikan. Anda dapat menggunakan SE_NODE_SESSION_TIMEOUT
untuk menimpa nilai tersebut dalam hitungan detik.
Permintaan sesi baru ditempatkan di Antrean Sesi sebelum diproses, dan permintaan tersebut berada dalam antrian hingga slot yang cocok ditemukan di seluruh Node yang terdaftar. Namun, permintaan sesi baru mungkin habis waktunya jika slot tidak ditemukan. Secara default, permintaan akan tetap berada dalam antrean hingga 300 detik sebelum batas waktu tercapai. Selain itu, upaya untuk memproses permintaan dilakukan setiap 5 detik (secara default).
Dimungkinkan untuk mengganti nilai-nilai tersebut melalui variabel lingkungan di Hub dan SessionQueue ( SE_SESSION_REQUEST_TIMEOUT
dan SE_SESSION_RETRY_INTERVAL
). Misalnya, batas waktu 500 detik adalah SE_SESSION_REQUEST_TIMEOUT=500
dan interval percobaan ulang selama 2 detik adalah SE_SESSION_RETRY_INTERVAL=2
.
Secara default, hanya satu sesi yang dikonfigurasi untuk dijalankan per kontainer melalui variabel lingkungan SE_NODE_MAX_SESSIONS
. Jumlah tersebut dapat ditingkatkan hingga prosesor maksimum yang tersedia, hal ini karena stabilitas lebih tercapai ketika satu container/browser memiliki 1 CPU untuk dijalankan.
Namun, jika Anda telah mengukur kinerja dan berdasarkan hal tersebut, menurut Anda lebih banyak sesi dapat dieksekusi di setiap penampung, Anda dapat mengganti batas maksimum dengan menyetel SE_NODE_MAX_SESSIONS
ke angka yang diinginkan dan SE_NODE_OVERRIDE_MAX_SESSIONS
ke true
. Namun demikian, tidak disarankan menjalankan lebih banyak sesi browser daripada prosesor yang tersedia karena Anda akan membebani sumber daya secara berlebihan.
Mengesampingkan pengaturan ini memiliki efek samping yang tidak diinginkan ketika perekaman video diaktifkan karena lebih dari satu sesi browser mungkin direkam dalam video yang sama.
Firefox, Chrome, Saat menggunakan mode tanpa kepala, server Xvfb tidak perlu dimulai.
Untuk menghindari memulai server, Anda dapat mengatur variabel lingkungan SE_START_XVFB
ke false
(atau nilai lain selain true
), misalnya:
$ 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
Untuk informasi selengkapnya, lihat masalah GitHub ini.
Dicatat:
SE_START_XVFB
harus disetel ke true
agar dapat dijalankan dalam mode --headless=new
. Di beberapa lingkungan, seperti Docker Swarm atau Kubernetes, ada gunanya mematikan container Node atau Standalone setelah N pengujian dijalankan. Misalnya, ini dapat digunakan di Kubernetes untuk menghentikan pod dan kemudian menskalakan pod baru setelah N sesi. Tetapkan variabel lingkungan SE_DRAIN_AFTER_SESSION_COUNT
ke nilai yang lebih tinggi dari nol untuk mengaktifkan perilaku ini.
$ docker run -e SE_DRAIN_AFTER_SESSION_COUNT=5 --shm-size= " 2g " selenium/standalone-firefox:4.26.0-20241101
Dengan perintah sebelumnya, container Standalone akan dimatikan setelah 5 sesi dijalankan.
Dalam container yang sudah berjalan lama, mungkin saja browser meninggalkan beberapa sisa. Ini bisa berupa proses browser yang macet atau pekerjaan yang telah selesai tetapi gagal menghentikan browser sepenuhnya, atau file sementara yang ditulis ke sistem file /tmp
(terutama pada browser berbasis Chrome). Untuk menghindari pengisian sumber daya seperti ID proses dan penggunaan sistem file dalam kontainer, terdapat skrip pembersihan otomatis yang berjalan setiap jam di kontainer node. Ini akan membersihkan proses lama dan file sementara yang lama. Secara default, ini dinonaktifkan. Jika diaktifkan, ini akan membersihkan browser yang berjalan lebih dari 2 jam, dan file yang lebih lama dari 1 hari. Ini dapat diaktifkan dan disesuaikan dengan variabel lingkungan berikut:
SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP
: nilai default false
, disetel ke true
untuk mengaktifkan pembersihan.SE_BROWSER_LEFTOVERS_INTERVAL_SECS
: nilai default 3600
(1 jam), interval pembersihan dalam hitungan detik.SE_BROWSER_LEFTOVERS_PROCESSES_SECS
: nilai default 7200
(2 jam), browser yang berjalan lebih lama dari waktu ini akan dimatikan.SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS
: nilai default 1
(1 hari), file yang dihasilkan oleh browser berbasis Chrome di /tmp
akan dihapus setelah beberapa hari ini (diabaikan saat menggunakan Firefox). Jika Anda menggunakan Selenium untuk sesi yang berjalan lama dan mengharapkan browser berjalan lebih dari 2 jam, jangan setel SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP
ke true
(biarkan nilai default false
), atau sesuaikan SE_BROWSER_LEFTOVERS_PROCESSES_SECS
untuk menyetel nilai lebih tinggi dari perkiraan jangka panjang Anda. menjalankan proses browser.
$ docker run -e SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP=true --shm-size= " 2g " selenium/node-chrome:4.26.0-20241101
Dengan perintah sebelumnya, pembersihan akan diaktifkan dengan pengaturan waktu default.
$ 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
Dengan perintah sebelumnya, pembersihan akan diaktifkan, tetapi akan berjalan setiap 2 jam (bukan 1), akan mematikan browser yang berjalan lebih dari 1 jam (bukannya 2 jam), dan akan menghapus file sementara yang lebih lama dari 2 hari (bukannya 1).
Beberapa keluaran variabel seperti kata sandi, rahasia, dll. disamarkan dalam log konsol. Untuk tujuan debugging, Anda dapat menonaktifkannya dengan menyetel SE_MASK_SECRETS
ke false
Saat membuat skrip bash, Anda dapat menutupi output dengan menggunakan sintaks echo "Current value is $(mask ${YOUR_VARIABLE})
SE_MASK_SECRETS_MIN_LENGTH
defaultnya adalah 3
. Ini berarti string yang panjang akan disamarkan ke ***
untuk menghindari panjangnya terkena serangan brute force.
Secara default, ada sertifikat yang ditandatangani sendiri yang tersedia pada gambar di lokasi /opt/selenium/secrets
termasuk
server.jks
: file truststore untuk dikonfigurasikan untuk JVM melalui properti sistem javax.net.ssl.trustStore
saat memulai server.server.pass
: file berisi kata sandi truststore untuk JVM melalui properti sistem javax.net.ssl.trustStorePassword
.tls.crt
: Sertifikat server untuk koneksi https diatur ke opsi Selenium --https-certificate
.tls.key
: Kunci pribadi server (dalam format PKCS8) untuk koneksi https diatur ke opsi Selenium --https-private-key
.Ada variabel lingkungan untuk mengonfigurasi koneksi aman:
Variabel lingkungan | Bawaan | Pilihan dari | Keterangan |
---|---|---|---|
SE_ENABLE_TLS | false | Aktifkan koneksi aman dengan konfigurasi default | |
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 | Nonaktifkan pemeriksaan host untuk komponen secara internal |
SE_HTTPS_CERTIFICATE | /opt/selenium/secrets/tls.crt | Selenium | Setel ke opsi CLI --https-certificate |
SE_HTTPS_PRIVATE_KEY | /opt/selenium/secrets/tls.key | Selenium | Setel ke opsi CLI --https-private-key |
Melalui pemasangan volume, Anda dapat mengganti sertifikat default dengan sertifikat Anda sendiri.
Sertifikat yang ditandatangani sendiri juga harus dipercaya oleh klien (tambahkan ke sistem bundel CA tepercaya secara luas) untuk menghindari pesan kesalahan terkait jabat tangan SSL saat membuat RemoteWebDriver.
Lihat contoh: docker-compose-v3-full-grid-secure.yml
Browser yang berbeda memiliki cara berbeda untuk mengatur bahasa dan lokal agar tidak mengikat.
Firefox dapat dikonfigurasi untuk menggunakan bahasa dan lokal tertentu dengan mengatur preferensi profil saat membuat WebDriver dari pengikatan. Selain itu, paket bahasa perlu diinstal sebagai add-on agar bahasa UI browser dapat diterapkan. Misalnya, untuk mengatur bahasa dan lokal browser ke vi-VN
, Anda dapat menggunakan langkah-langkah berikut:
Dapatkan paket bahasa Firefox terbaru untuk bahasa yang diinginkan misalnya https://download.mozilla.org/?product=firefox-langpack-latest-SSL&lang=vi. Kemudian, Anda dapat menginstal paket bahasa sebagai add-on saat membuat instance 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' )
Ada skrip untuk mendapatkan semua paket bahasa yang tersedia untuk versi Firefox tertentu. Anda dapat menjalankan skrip untuk mendapatkan paket bahasa ke sumber Anda. Misalnya:
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
Atau, Anda dapat memasang direktori kontainer /home/seluser/firefox/distribution/extensions
ke direktori host untuk mengakses paket yang telah dibuat sebelumnya di dalam kontainer untuk digunakan dalam skrip pengujian Anda.
Supervisor digunakan untuk mengelola proses dan mencatat dalam wadah. Beberapa konfigurasi untuk supervisord
dapat diatur melalui variabel lingkungan seperti di bawah ini:
Variabel lingkungan | Bawaan | konfigurasi supervisord |
---|---|---|
SE_SUPERVISORD_LOG_LEVEL | info | supervisord.loglevel |
SE_SUPERVISORD_CHILD_LOG_DIR | /tmp | supervisord.childlogdir |
SE_SUPERVISORD_LOG_FILE | /tmp/supervisord.log | supervisord.logfile |
SE_SUPERVISORD_PID_FILE | /tmp/supervisord.pid | supervisord.pidfile |
Kloning repo dan dari root direktori proyek Anda dapat membangun semuanya dengan menjalankan:
$ VERSION=local make build
Jika Anda perlu mengonfigurasi variabel lingkungan untuk membuat image (misalnya proxy http), cukup atur variabel lingkungan BUILD_ARGS
yang berisi variabel tambahan untuk diteruskan ke konteks buruh pelabuhan (ini hanya akan berfungsi dengan buruh pelabuhan >= 1.9)
$ BUILD_ARGS= " --build-arg http_proxy=http://acme:3128 --build-arg https_proxy=http://acme:3128 " make build
Catatan: Menghilangkan VERSION=local
akan membuat gambar dengan versi yang dirilis tetapi mengganti tanggal dengan yang sekarang.
Jika Anda ingin membuat image dengan UID/GID host, cukup setel variabel lingkungan BUILD_ARGS
$ BUILD_ARGS= " --build-arg UID= $( id -u ) --build-arg GID= $( id -g ) " make build
Jika Anda ingin membuat image dengan pengguna/kata sandi default yang berbeda, cukup setel variabel lingkungan BUILD_ARGS
$ BUILD_ARGS= " --build-arg SEL_USER=yourseluser --build-arg SEL_PASSWD=welcome " make build
Berdasarkan Dockerfile terbaru (dengan mengkloning repo dan dari root direktori proyek), Anda dapat membuat image dengan kombinasi spesifik Selenium Grid, dan versi browser.
Misalnya, Anda ingin membangun gambar node-chrome
dan standalone-chrome
dengan grid berbasis versi 4.17.0
, masing-masing versi browser chrome 119
, 120
, 123
.
$ ./tests/build-backward-compatible/bootstrap.sh 4.17.0 119,120,123 chrome
Dalam generik, skrip mengambil argumen berikut:
$1
(wajib): Versi Grid Selenium. Detail diambil dari file matriks$2
(wajib): Versi utama browser, beberapa nilai yang dipisahkan oleh koma. Detail diambil dari file matriks$3
(opsional): Nama browser. Jika tidak disediakan, itu akan mengulangi semua browser ( chrome
, edge
, firefox
)$4
(Opsional): Dorong gambar ke registri. Secara default, itu false
. Jika Anda ingin mendorong gambar ke Registry, atur ke true
(Login Docker yang diperlukan ke namespace Anda yang dilakukan sebelum menjalankan skrip). Untuk mengatur namespace Anda untuk gambar, Anda dapat mengatur NAME
variabel lingkungan sebelum menjalankan skrip. Misalnya:
$ export NAME=artifactory.yourcompany.com/selenium
$ ./tests/build-backward-compatible/bootstrap.sh 4.17.0 119,120,123 chrome
Setelah menjalankan skrip, Anda akan melihat daftar gambar dengan tag lengkap untuk menyematkan grid spesifik dan versi browser mengikuti konvensi penandaan
Selenium Server, Browser dan Driver telah diinstal sebelumnya dalam gambar. Jika Anda ingin tetap pada versi selenium yang sama dan cukup memutakhirkan browser dan drivernya ke yang terbaru. Anda dapat mengikuti langkah -langkah di bawah ini
Kloning repo dan dari root direktori proyek Anda dapat meningkatkan dengan menjalankan:
$ VERSION= $EXPECTED_SELENIUM_VERSION make chrome_upgrade_version
Misalnya: VERSION=4.16.1 make chrome_upgrade_version
Gambar baru memiliki tag $VERSION_YYYYMMDD
di mana YYYYMMDD
adalah tanggal saat ini.
$ VERSION= $SELENIUM_VERSION make firefox_upgrade_version
$ VERSION= $SELENIUM_VERSION make edge_upgrade_version
Anda dapat merujuk ke perintah detail dalam file Makefile.
Ini adalah praktik yang baik untuk memeriksa terlebih dahulu jika kisi -kisi sudah habis dan siap menerima permintaan, ini dapat dilakukan dengan memeriksa titik akhir /wd/hub/status
.
Sebuah kisi yang siap, terdiri dari hub dan dua node, bisa terlihat seperti ini:
{
"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" : [
]
}
]
}
}
Nilai "ready": true
menunjukkan bahwa kisi siap menerima permintaan. Status ini dapat disurvei melalui skrip sebelum menjalankan tes apa pun, atau dapat ditambahkan sebagai cetak kesehatan ketika wadah Docker dimulai.
Script check-grid.sh, yang termasuk dalam gambar, dapat digunakan untuk polling status grid.
Contoh ini memeriksa status kisi setiap 15 detik, ia memiliki batas waktu 30 detik ketika cek dilakukan, dan ia coba lagi hingga 5 kali sampai wadah ditandai sebagai tidak sehat. Harap gunakan nilai yang disesuaikan agar sesuai dengan kebutuhan Anda, (jika perlu) Ganti --host
dan --port
parameter untuk yang digunakan di lingkungan Anda.
$ 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
Catatan: Pembatas line tidak akan berfungsi pada terminal berbasis Windows, coba baik
^
atau backtick.
Status kesehatan wadah dapat diperiksa dengan melakukan docker ps
dan memverifikasi status (healthy)|(unhealthy)
atau dengan memeriksanya dengan cara berikut:
$ docker inspect --format= ' {{json .State.Health.Status}} ' selenium-hub
" healthy "
Masalah umum yang dikenal di Docker adalah bahwa wadah yang berjalan tidak selalu berarti bahwa aplikasi di dalamnya sudah siap. Cara sederhana untuk mengatasi ini adalah dengan menggunakan skrip "menunggu-untuk", lebih banyak informasi dapat dilihat di sini.
Skrip berikut adalah contoh bagaimana ini dapat dilakukan dengan menggunakan bash, tetapi prinsip yang sama berlaku jika Anda ingin melakukan ini dengan bahasa pemrograman yang digunakan untuk menulis tes. Dalam contoh di bawah ini, skrip akan polling titik akhir status setiap detik. Jika jaringan tidak siap dalam 30 detik, skrip akan keluar dengan kode kesalahan.
#! /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
Akan membutuhkan
jq
diinstal melaluiapt-get
, kalau tidak, skrip akan terus mencetakWaiting
tanpa menyelesaikan eksekusi.
Catatan: Jika perlu, ganti localhost
dan 4444
untuk nilai yang benar di lingkungan Anda. Juga, skrip ini adalah polling tanpa batas waktu, Anda mungkin ingin mengubahnya dan membangun waktu tunggu.
Katakanlah perintah normal untuk menjalankan tes Anda adalah mvn clean test
. Berikut adalah cara untuk menggunakan skrip di atas dan menjalankan tes Anda:
$ ./wait-for-grid.sh && mvn clean test
Seperti ini, skrip akan polling sampai grid siap, dan kemudian tes Anda akan dimulai.
Secara default, gambar berbasis diinstal libnss3-tools
dan menginisialisasi /home/seluser/.pki/nssdb
, sehingga Anda dapat menambahkan sertifikat Anda dengan akar tanpa akar. Jika Anda perlu menginstal sertifikat khusus, CA, CA menengah, atau sertifikat klien (misalnya, perusahaan internal perusahaan) Anda dapat membuat gambar Docker Anda sendiri dari gambar node selenium. Browser berbasis kromium menggunakan nssdb
sebagai toko sertifikat. Anda kemudian dapat menginstal semua sertifikat internal yang diperlukan di DockerFile Anda seperti ini:
Ada skrip utilitas yang dikemas dalam gambar yang dapat digunakan untuk menambahkan sertifikat Anda ke toko nssdb
dan bundel ca. Script adalah /opt/bin/add-cert-helper.sh
.
Buat DockerFile yang menggunakan gambar node selenium sebagai basis dan menyalin skrip ke wadah, dan mengeksekusinya. Misalnya, DockerFile
Jika Anda harus membuat serangkaian sertifikat dan gambar simpul yang berbeda. Anda dapat membuat skrip bootstrap untuk melakukannya dalam satu-shot. Misalnya, bootstrap.sh
Contoh di atas dapat diuji dengan perintah berikut:
make test_custom_ca_cert
# ./tests/customCACert/bootstrap.sh
Anda dapat menemukan informasi lebih lanjut di sini
Dengan cara ini sertifikat akan diinstal dan node akan dimulai secara otomatis seperti sebelumnya.
Sebagai alternatif, Anda dapat menambahkan file sertifikat ke gambar selenium yang ada. Contoh praktis ini mengasumsikan Anda memiliki gambar yang dikenal untuk digunakan sebagai gambar build dan memiliki cara untuk menerbitkan gambar baru ke registri Docker lokal Anda.
Contoh ini menggunakan distro berbasis redhat sebagai gambar build (rocky linux) tetapi bisa menjadi gambar linux pilihan Anda. Harap dicatat bahwa instruksi build akan bervariasi di antara distribusi. Anda dapat memeriksa instruksi untuk Ubuntu pada contoh sebelumnya.
Contohnya juga mengasumsikan CA internal Anda sudah ada di /etc/pki/ca-trust/source/anchors/your_ca.pem , lokasi default untuk Rocky Linux. Atau, Anda juga dapat menyediakan file -file ini dari host Anda dan menyalinnya ke dalam gambar build.
Untuk browser Chrome dan Edge, resepnya sama, cukup adaptasi nama gambar (node-chrome atau simpul-tepi):
# 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
Contoh untuk 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
Proyek ini menggunakan X11VNC sebagai server VNC untuk memungkinkan pengguna untuk memeriksa apa yang terjadi di dalam wadah. Pengguna dapat terhubung ke server ini dengan dua cara:
Server VNC mendengarkan port 5900, Anda dapat menggunakan klien VNC dan menghubungkannya. Jangan ragu untuk memetakan port 5900 ke port eksternal gratis yang Anda inginkan.
Port internal 5900 tetap sama karena itu adalah port yang dikonfigurasi untuk server VNC yang berjalan di dalam wadah. Anda dapat menggantikannya dengan variabel lingkungan SE_VNC_PORT
jika Anda ingin menggunakan --net=host
.
Berikut adalah contoh dengan gambar mandiri, konsep yang sama berlaku untuk gambar simpul.
$ 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
Kemudian, Anda akan menggunakan klien VNC Anda:
Jika Anda mendapatkan prompt meminta kata sandi, itu adalah: secret
. Jika Anda ingin mengubah ini, Anda dapat mengatur variabel lingkungan SE_VNC_PASSWORD
.
Jika Anda ingin menjalankan VNC tanpa otentikasi kata sandi, Anda dapat mengatur variabel lingkungan SE_VNC_NO_PASSWORD=1
.
Jika Anda ingin menjalankan VNC dalam mode View-only, Anda dapat mengatur variabel lingkungan SE_VNC_VIEW_ONLY=1
.
Jika Anda ingin memodifikasi batas deskriptor file terbuka untuk proses server VNC, Anda dapat mengatur variabel lingkungan SE_VNC_ULIMIT=4096
.
Proyek ini menggunakan NOVNC untuk memungkinkan pengguna untuk memeriksa aktivitas kontainer secara visual dengan browser mereka. Ini mungkin berguna jika Anda tidak dapat menginstal klien VNC di mesin Anda. Port 7900 digunakan untuk memulai Novnc, jadi Anda harus terhubung ke port itu dengan browser Anda.
Demikian pula dengan bagian sebelumnya, jangan ragu untuk memetakan port 7900 ke port eksternal gratis yang Anda inginkan. Anda juga dapat menimpanya dengan variabel lingkungan SE_NO_VNC_PORT
jika Anda ingin menggunakan --net=host
.
Berikut adalah contoh dengan gambar mandiri, konsep yang sama berlaku untuk gambar simpul.
$ 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
Kemudian, Anda akan menggunakan di browser Anda:
Jika Anda mendapatkan prompt meminta kata sandi, itu adalah: secret
.
Jika Anda kehabisan sumber daya, atau tidak perlu memeriksa sesi berjalan, dimungkinkan untuk tidak menjalankan VNC sama sekali. Cukup atur SE_START_VNC=false
pada startup grid.
Untuk mengaktifkan penelusuran dalam wadah grid selenium, perintah berikut dapat dieksekusi:
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
Anda juga dapat merujuk pada Docker di bawah ini menyusun file YAML untuk dapat memulai kisi -kisi sederhana (atau) kisi -kisi dinamis.
Anda dapat melihat JAEGER UI dan melacak permintaan Anda.
Secara default, penelusuran diaktifkan dalam komponen grid. Tanpa jejak titik akhir eksportir, itu akan mencari contoh lokal misalnya localhost/[0:0:0:0:0:0:0:1]:4117
. Dalam log kontainer Anda dapat melihat beberapa baris seperti di bawah ini:
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)
Dalam hal ini, cukup atur SE_ENABLE_TRACING=false
ke semua komponen wadah untuk menonaktifkan penelusuran (masing -masing komponen mengekspor jejaknya sendiri).
Semua output dikirim ke stdout, sehingga dapat diperiksa dengan menjalankan:
$ docker logs -f < container-id | container-name >
Anda dapat meningkatkan output log dengan meneruskan variabel lingkungan ke wadah:
SE_OPTS="--log-level FINE"
--shm-size="2g"
Mengapa --shm-size 2g
diperlukan?
Ini adalah solusi yang diketahui untuk menghindari browser yang menabrak di dalam wadah Docker, berikut adalah masalah yang terdokumentasi untuk Chrome dan Firefox. Ukuran SHM 2GB adalah sewenang -wenang tetapi diketahui bekerja dengan baik, kasus penggunaan spesifik Anda mungkin memerlukan nilai yang berbeda, disarankan untuk menyesuaikan nilai ini sesuai dengan kebutuhan Anda.
Jika Anda melihat pengecualian selenium berikut:
Message: invalid argument: can't kill an exited process
atau
Message: unknown error: Chrome failed to start: exited abnormally
atau
[DriverServiceSessionFactory.apply] - Error while creating session with the driver service. Stopping driver service: java.util.concurrent.TimeoutException
Alasannya mungkin Anda telah mengatur variabel lingkungan SE_START_XVFB
menjadi false
, tetapi lupa untuk benar -benar menjalankan Firefox, Chrome atau Edge dalam mode tanpa kepala.
Skenario umum sedang memasang volume ke wadah browser untuk mengambil file yang diunduh. Ini bekerja dengan baik di Windows dan MacOS tetapi bukan tanpa solusi di Linux. Untuk detail lebih lanjut, periksa masalah yang terdokumentasi dengan baik ini.
Misalnya, saat menggunakan Linux, Anda mungkin memulai wadah dengan cara berikut:
docker run -d -p 4444:4444 --shm-size= " 2g "
-v /home/ubuntu/files:/home/seluser/Downloads
selenium/standalone-chrome:4.26.0-20241101
Itu akan memasang direktori host /home/ubuntu/files
ke /home/seluser/Downloads
di dalam wadah (direktori unduhan browser default). Masalahnya terjadi karena volume akan dipasang sebagai root
; Oleh karena itu, browser tidak dapat menulis file ke direktori itu karena sedang berjalan di bawah seluser
Pengguna. Ini terjadi karena itulah cara Docker memasang volume di Linux, lebih detail dalam masalah ini.
Solusi untuk ini adalah membuat direktori pada host dan mengubah izinnya sebelum memasang volume . Bergantung pada izin pengguna Anda, Anda mungkin perlu menggunakan sudo
untuk beberapa perintah ini:
mkdir /home/ubuntu/files
chown 1200:1201 /home/ubuntu/files
Setelah melakukan ini, Anda harus dapat mengunduh file ke direktori yang dipasang. Jika Anda memiliki solusi yang lebih baik, silakan kirim permintaan tarik kepada kami!
Mirip dengan volume mount untuk mengambil file yang diunduh. Untuk file video, Anda mungkin perlu melakukan hal yang sama
mkdir /tmp/videos
chown 1200:1201 /tmp/videos