Skip to content

Selenoid

官方网站:Selenoid

使用 Golang 实现的 Selenium hub。它使用 Docker 来启动浏览器。

使用

📌 前置条件

确保您安装了最新的 Docker 版本。

拉取 selenoid 和 selenoid-ui 镜像

shell
docker pull aerokube/selenoid
docker pull aerokube/selenoid-ui

拉取需要的浏览器镜像

可用镜像列表:Selenium

shell
docker pull selenoid/vnc_chrome:127.0

创建配置文件

vim ./config/browsers.json

json
{
  "chrome": {
    "default": "127.0",
    "versions": {
      "127.0": {
        "image": "selenoid/vnc_chrome:127.0",
        "port": "4444"
      }
    }
  }
}

配置时区

通过 env 配置环境变量 TZ 容器的默认时区:

env: ["TZ=Asia/Shanghai"]

通过 配置时区

启动 Selenoid

shell
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

shell
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 键进行配置。

设置屏幕分辨率

设置屏幕的分辨率,后面视频记录默认使用的就是屏幕分辨率大小进行录制(非浏览器窗口大小)

python
"screenResolution": "1920x1080"

VNC

在测试执行期间显示浏览器屏幕。这适用于安装了 VNC 服务器的容器。

python
"enableVNC": True

可通过 http://127.0.0.1:4444/vnc/<session-id>; 进行访问

Video 记录

记录测试执行的视频,不需要 VNC 服务器支持,但是需要额外安装 selenoid/video-recorder:latest-release 镜像,在开启录像时附加到对应的容器。

python
"enableVideo": True

其它可配置项:

  • videoFrameRate: 视频的帧率,默认是 12
  • videoCodec: 修改视频的编码器,默认是 libx264,可修改为 mpeg4

    可通过 docker run -it --rm --entrypoint /usr/bin/ffmpeg selenoid/video-recorder -codecs 查看可用的编码器

  • ``:

下载容器,版本一定需要是 latest-release

shell
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/

删除录制的视频文件:

shell
curl -X DELETE http://127.0.0.1:4444/video/sessionid.mp4

配置时区

有些测试需要在操作系统中设置特定的时区。

python
"timeZone": "Asia/Shanghai"

编写测试脚本

Selenium < 4.10
python
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 参数。

python
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