Selenoid
官方网站:Selenoid
使用 Golang 实现的 Selenium hub。它使用 Docker 来启动浏览器。
使用
📌 前置条件
确保您安装了最新的 Docker 版本。
拉取 selenoid 和 selenoid-ui 镜像
docker pull aerokube/selenoid
docker pull aerokube/selenoid-ui
拉取需要的浏览器镜像
可用镜像列表:Selenium
docker pull selenoid/vnc_chrome:127.0
创建配置文件
vim ./config/browsers.json
{
"chrome": {
"default": "127.0",
"versions": {
"127.0": {
"image": "selenoid/vnc_chrome:127.0",
"port": "4444"
}
}
}
}
配置时区
通过 env
配置环境变量 TZ
容器的默认时区:
env: ["TZ=Asia/Shanghai"]
通过 配置时区
启动 Selenoid
docker run -d --name selenoid -p 4444:4444 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ./config/:/etc/selenoid/:ro \
aerokube/selenoid
-v /var/run/docker.sock:/var/run/docker.sock
:将主机的套接字挂载到 Selenoid 容器中。-v ./config/:/etc/selenoid/:ro
:以只读的方式挂载配置文件夹。
启动 Selenoid UI
docker run -d --name selenoid-ui --link selenoid:selenoid -p 8080:8080 \
aerokube/selenoid-ui \
--selenoid-uri http://selenoid:4444
Selenoid 支持的特殊能力
官方文档:Special Capabilities
配置方法
使用 selenoid:options
键进行配置。
设置屏幕分辨率
设置屏幕的分辨率,后面视频记录默认使用的就是屏幕分辨率大小进行录制(非浏览器窗口大小)
"screenResolution": "1920x1080"
VNC
在测试执行期间显示浏览器屏幕。这适用于安装了 VNC 服务器的容器。
"enableVNC": True
可通过 http://127.0.0.1:4444/vnc/<session-id>;
进行访问
Video 记录
记录测试执行的视频,不需要 VNC 服务器支持,但是需要额外安装 selenoid/video-recorder:latest-release
镜像,在开启录像时附加到对应的容器。
"enableVideo": True
其它可配置项:
videoFrameRate
: 视频的帧率,默认是 12videoCodec
: 修改视频的编码器,默认是libx264
,可修改为mpeg4
可通过
docker run -it --rm --entrypoint /usr/bin/ffmpeg selenoid/video-recorder -codecs
查看可用的编码器- ``:
下载容器,版本一定需要是 latest-release
docker pull selenoid/video-recorder:latest-release
需要在启动 selenoid 容器时配置 -v /home/wen/selenoid-video/:/opt/selenoid/video -e OVERRIDE_VIDEO_OUTPUT_DIR=/home/wen/selenoid-video/
删除录制的视频文件:
curl -X DELETE http://127.0.0.1:4444/video/sessionid.mp4
配置时区
有些测试需要在操作系统中设置特定的时区。
"timeZone": "Asia/Shanghai"
编写测试脚本
Selenium < 4.10
from selenium import webdriver
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities={
"browserName": "chrome",
"browserSize": "1920x1080",
# "browserVersion": "125.0",
}
)
新版本的 Selenium 不再支持 desired_capabilities
参数。
selenoid_options = {
"enableVNC": True,
"enableVideo": False,
}
options = webdriver.ChromeOptions()
options.set_capability("selenoid:options", selenoid_options)
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
options=options
)
建立连接时间过长
可以注意使用的是 localhost
还是 127.0.0.1
。