โครงการนี้เกิดขึ้นได้โดยอาสาสมัครอาสาสมัครที่สละเวลาหลายพันชั่วโมง และทำให้ซอร์สโค้ดใช้งานได้ฟรีภายใต้ Apache License 2.0
อิมเมจ Docker เหล่านี้มาพร้อมกับแท็กจำนวนหนึ่งเพื่อทำให้การใช้งานง่ายขึ้น ลองดูที่หนึ่งในรีลีสของเรา
หากต้องการรับการแจ้งเตือนเกี่ยวกับสินค้าออกใหม่ ให้เพิ่มตัวเองเป็นผู้ดู "เฉพาะรุ่น"
รูปภาพเหล่านี้เผยแพร่ไปยังรีจิสทรี Docker Hub ที่ Selenium 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
เพื่อใช้หน่วยความจำที่แชร์ของโฮสต์
JP ควรใช้อิมเมจ Docker พร้อมแท็กแบบเต็มเสมอเพื่อปักหมุดเบราว์เซอร์และเวอร์ชันกริดที่ต้องการ ดูข้อตกลงการแท็กเพื่อดูรายละเอียด
ตั้งแต่แท็กรูปภาพที่ใช้ 4.21.0
เป็นต้นไป สถาปัตยกรรมที่โปรเจ็กต์นี้รองรับมีดังนี้:
สถาปัตยกรรม | มีอยู่ |
---|---|
x86_64 (หรือที่เรียกว่า amd64) | |
aarch64 (หรือที่เรียกว่า arm64/armv8) | |
armhf (หรือที่เรียกว่า arm32/armv7l) |
เบราว์เซอร์ต่อไปนี้มีอยู่ในรูปภาพหลายส่วน:
สถาปัตยกรรม | โครเมียม | โครเมียม | ไฟร์ฟอกซ์ | ขอบ |
---|---|---|---|---|
x86_64 (หรือที่เรียกว่า amd64) | ||||
aarch64 (หรือที่เรียกว่า arm64/armv8) | ||||
armhf (หรือที่เรียกว่า arm32/armv7l) |
บันทึก:
Google ไม่ได้สร้าง Chrome ( google-chrome
) สำหรับแพลตฟอร์ม Linux/ARM ดังนั้น อิมเมจ Chrome (โหนดและสแตนด์อโลน) จึงใช้ได้เฉพาะกับ AMD64 เท่านั้น ในทำนองเดียวกัน Microsoft ไม่ได้สร้าง Edge ( microsoft-edge
) สำหรับแพลตฟอร์ม Linux/ARM
ไม่แนะนำให้เรียกใช้อิมเมจ AMD64 ภายใต้การจำลองบนแพลตฟอร์ม ARM64 เนื่องจากปัญหาด้านประสิทธิภาพและความเสถียร
สำหรับ Linux/ARM ให้ใช้เบราว์เซอร์ Chromium แบบโอเพ่นซอร์ส อิมเมจ Chromium (โหนดและสแตนด์อโลน) มีให้เลือกหลายอาร์ค
$ docker run --rm -it -p 4444:4444 -p 5900:5900 -p 7900:7900 --shm-size 2g selenium/standalone-chromium:latest
รูปภาพแบบหลายอาร์คได้รับการทดสอบบน CircleCI ด้วยคลาสทรัพยากร Linux/ARM64 ดูสถานะด้านล่าง
สำหรับอิมเมจคอนเทนเนอร์นักเทียบท่ารุ่นทดลอง ซึ่งทำงานบนแพลตฟอร์ม เช่น Apple M-series หรือ Raspberry Pi พื้นที่เก็บข้อมูลที่ seleniumhq-community/docker-seleniarm ได้จัดเตรียมรูปภาพซึ่งเผยแพร่ในรีจิสทรี Seleniarm Docker Hub
ดูปัญหา #1076 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับภาพเหล่านี้
ตอนนี้ fork seleniumhq-community/docker-seleniarm ถูกรวมเข้าด้วยกันแล้ว
เราขอแนะนำให้เปิดใช้งานการจัดเก็บอิมเมจคอนเทนเนอร์คุณลักษณะทดลองใน Docker Engine containerd
เข้าใจอิมเมจที่มีหลายแพลตฟอร์ม โดยที่แท็กรูปภาพเดียวสามารถอ้างอิงถึงตัวแปรต่างๆ ที่ครอบคลุมระบบปฏิบัติการและสถาปัตยกรรมฮาร์ดแวร์ต่างๆ ช่วยให้กระบวนการสร้าง จัดเก็บ และเผยแพร่ภาพบนแพลตฟอร์มต่างๆ ง่ายขึ้น
คำสั่งเดียวเพื่อเปิดใช้งานคุณสมบัตินั้นใน Docker Engine:
make set_containerd_image_store
หากต้องการสร้างอิมเมจทั้งหมดสำหรับหลายแพลตฟอร์ม ให้รันคำสั่งต่อไปนี้:
PLATFORMS=linux/amd64,linux/arm64 make build
หากต้องการสร้างอิมเมจสำหรับแพลตฟอร์มเฉพาะ ให้รันคำสั่งต่อไปนี้:
PLATFORMS=linux/arm64 make build
ตามค่าเริ่มต้น โดยไม่ระบุตัวแปร PLATFORMS
อิมเมจจะถูกสร้างขึ้นสำหรับแพลตฟอร์ม linux/amd64
รูปภาพยามค่ำคืนถูกสร้างขึ้นบน Nightly ที่สร้างบนโปรเจ็กต์อัปสตรีม Selenium พร้อมการเปลี่ยนแปลงล่าสุดในสาขาหลักในพื้นที่เก็บข้อมูลนี้ แท็กรูปภาพคือ nightly
ไม่แนะนำให้ใช้รูปภาพในการผลิต มันมีไว้สำหรับการทดสอบเท่านั้น
$ docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:nightly
ลองใช้งาน docker compose เพื่อเริ่มต้นใช้งาน Nightly image docker-compose-v3-full-grid-nightly.yml
ในการทำการทดสอบหรือทำงานร่วมกับเบราว์เซอร์รุ่นก่อนเผยแพร่ Google, Mozilla และ Microsoft จะคงช่องทางการเผยแพร่เวอร์ชัน Dev และ Beta สำหรับผู้ที่ต้องการดูว่าจะมีการเผยแพร่รายการใดบ้างในเร็วๆ นี้แก่ประชาชนทั่วไป
คำแนะนำในการรันในโหมดสแตนด์อโลนมีดังนี้:
Chrome เบต้า:
$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:beta
นักพัฒนา Chrome:
$ 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
นักเทียบท่า-เขียน-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 "
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอิมเมจคอนเทนเนอร์ช่อง Dev และ Beta โปรดดูบล็อกโพสต์เกี่ยวกับเบราว์เซอร์ช่อง Dev และ Beta ผ่าน 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
เมื่อคุณใช้ Grid เสร็จแล้ว และออกจากคอนเทนเนอร์แล้ว เครือข่ายสามารถลบออกได้โดยใช้คำสั่งต่อไปนี้:
# 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 เป็นวิธีที่ง่ายที่สุดในการเริ่ม Grid ใช้ทรัพยากรที่ลิงก์ด้านล่าง บันทึกไว้ในเครื่อง และตรวจสอบคำแนะนำการดำเนินการที่ด้านบนของแต่ละไฟล์
docker-compose-v2.yml
docker-compose-v3.yml
หากต้องการหยุด Grid และล้างคอนเทนเนอร์ที่สร้างขึ้น ให้เรียกใช้ docker compose down
docker-compose-v3-swarm.yml
คุณสามารถเริ่ม Selenium Grid โดยแยกส่วนประกอบทั้งหมดออกจากกัน เพื่อความง่าย เราจะจัดเตรียมเฉพาะตัวอย่างที่มีการเขียนนักเทียบท่าเท่านั้น บันทึกไฟล์ในเครื่อง และตรวจสอบคำแนะนำการดำเนินการที่อยู่ด้านบนสุด
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 ที่เราจัดทำนั้นอิงตามอิมเมจ ffmpeg Ubuntu ที่จัดทำโดยโปรเจ็กต์ jrottenberg/ffmpeg ขอขอบคุณที่ให้ภาพนี้และทำให้งานของเราง่ายขึ้น ?
ตั้งแต่แท็กรูปภาพที่ใช้ 4.20.0
เป็นต้นไป อิมเมจวิดีโอ Docker อิงตามอิมเมจ FFmpeg Ubuntu ที่จัดทำโดยโปรเจ็กต์ linuxserver/docker-ffmpeg เนื่องจากรูปภาพพร้อมใช้งานสำหรับหลายแพลตฟอร์ม ขอขอบคุณที่ทำให้โครงการของเราง่ายขึ้นและช่วยให้เราก้าวไปข้างหน้าด้วยการสนับสนุนสถาปัตยกรรมที่หลากหลาย
หมายเหตุ :
/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
ขึ้นอยู่กับการสนับสนุนของ Metadata ในการทดสอบ เมื่อเครื่องบันทึกวิดีโอถูกใช้งานไซด์คาร์กับโหนดเบราว์เซอร์โดยเปิดใช้งาน 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_<sessionId>.mp4
หากกรอบการทดสอบจัดการชื่อการทดสอบของคุณ และแน่นอนว่าชื่อนั้นไม่ซ้ำกัน คุณสามารถปิดการใช้งานรหัสเซสชันต่อท้ายชื่อไฟล์วิดีโอได้โดยการตั้งค่า SE_VIDEO_FILE_NAME_SUFFIX=false
ชื่อไฟล์จะถูกตัดให้เหลือ 255 อักขระเพื่อหลีกเลี่ยงชื่อไฟล์ที่ยาว นอกจากนี้ space
วรรคจะถูกแทนที่ด้วย _
และมีเพียงอักขระตัวอักษร ตัวเลข -
(ยัติภังค์) _
(ขีดล่าง) เท่านั้นที่จะยังคงอยู่ในชื่อไฟล์
คุณสามารถปรับแต่ง Trim regex ได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม SE_VIDEO_FILE_NAME_TRIM_REGEX
ค่าเริ่มต้นคือ [:alnum:]-_
regex ควรเข้ากันได้กับคำสั่ง tr
ใน bash
ที่ระดับการใช้งาน คอนเทนเนอร์ตัวบันทึกจะทำงานอยู่เสมอ นอกจากนี้ คุณยังสามารถปิดใช้งานกระบวนการบันทึกวิดีโอผ่านความสามารถเซสชัน se:recordVideo
ตัวอย่างเช่นในการผูก Python:
options . set_capability ( 'se:recordVideo' , False )
ในคอนเทนเนอร์ตัวบันทึกจะดำเนินการค้นหา GraphQL ใน Hub ตาม Node SessionId และแยกค่าของ se:recordVideo
ในความสามารถก่อนที่จะตัดสินใจเริ่มกระบวนการบันทึกวิดีโอหรือไม่
หมายเหตุ: หากต้องการเข้าถึงตำแหน่งข้อมูล GraphQL คอนเทนเนอร์ตัวบันทึกจำเป็นต้องทราบ Hub URL Hub 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
จะใช้รหัสเซสชันเป็นชื่อไฟล์วิดีโอ เพื่อให้แน่ใจว่าชื่อไฟล์วิดีโอจะไม่ซ้ำกันในการอัปโหลด การสร้างชื่อไฟล์วิดีโอจะทำงานโดยอัตโนมัติตามจุดสิ้นสุดของโหนด /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_
ดูข้อมูลอ้างอิงด้านล่างสำหรับรายละเอียดเพิ่มเติม
กำหนดค่าการบันทึกวิดีโอและการอัพโหลดสำหรับ Hub และ Nodes: 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): tests/docker-compose-v3-test-standalone-docker.yaml
ตัวแปรสภาพแวดล้อม | ค่าเริ่มต้น | คำอธิบาย |
---|---|---|
SE_UPLOAD_RETAIN_LOCAL_FILE | false | เก็บไฟล์ในเครื่องไว้หลังจากอัปโหลดสำเร็จ |
SE_UPLOAD_COMMAND | copy | คำสั่ง RCLONE ใช้สำหรับถ่ายโอนไฟล์ บังคับใช้ move เมื่อเก็บไฟล์ในเครื่องเป็น false |
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 | ไดเร็กทอรีของไฟล์ปรับแต่ง (เปลี่ยนเมื่อติดตั้งไฟล์ conf ในไดเร็กทอรีอื่น) |
Grid 4 มีความสามารถในการเริ่มคอนเทนเนอร์ Docker ตามความต้องการ ซึ่งหมายความว่าจะเริ่มต้นคอนเทนเนอร์ Docker ในเบื้องหลังสำหรับแต่ละคำขอเซสชันใหม่ การทดสอบจะดำเนินการที่นั่น และเมื่อการทดสอบเสร็จสิ้น คอนเทนเนอร์จะถูกโยนทิ้งไป
โหมดการดำเนินการนี้สามารถใช้ได้ทั้งในบทบาทสแตนด์อโลนหรือโหนด ต้องบอกว่าโหมดการดำเนินการ "ไดนามิก" ต้องใช้อิมเมจ Docker ใดเมื่อคอนเทนเนอร์เริ่มต้น นอกจากนี้ Grid จำเป็นต้องทราบ URI ของ Docker daemon การกำหนดค่านี้สามารถวางไว้ในไฟล์ 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 appr