Docker Selenium Grid 配置
通过 Docker 方式启动
Docker images for Selenium Grid Server (Standalone, Hub, and Nodes)
拉取镜像
查看版本信息 docker-selenium
1
|
docker pull selenium/hub:3.14.0
|
1
|
docker pull selenium/node-chrome:3.14.0
|
启动主hub
1
|
docker run -d -P --name selenium-hub selenium/hub:3.14.0
|
启动分组node-chrome
1
|
docker run -d --link selenium-hub:hub selenium/node-chrome:3.14.0
|
–link 通过 link 关联
selenium-hub
容器,并为其设置了别名hub
通过 docker-compose 方式启动
docker-compose.yaml
1
|
version: "3"
|
目前使用的
1
|
# To execute this docker-compose yml file use `docker-compose -f <file_name> up`
|
vnc 密码:secret
踩坑记
1.Docker selenium 中文乱码,未验证
3.141.59-lithium 这个版本打开 gbk 编码的网站没有问题,例如:“163.com”
Dockerfile
1
|
FROM selenium/node-chrome-debug
|
构建
1
|
docker build -t selenium/node-chrome-debug-zh-cn .
|
2. 窗口最大化失败
在脚本中对浏览器进行最大化操作:driver.maximize_window()
这个命令一向运行是没问题的,但是在docker 中却报错如下:
Message: unknown error: failed to change window state to maximized, current state is normal
原因:docker 运行 node 没有设置屏幕尺寸。
1
|
- SCREEN_WIDTH=1366
|
或者:
查了一下,说是selenium 的bug。 找了一下,没有合适的解决方案,粗暴解决如下:
1
|
try:
|
3. chrome option 不生效。
因为部分用例需要模拟移动设备,或设置浏览器为英文,所以使用 chrome option进行设置。 原来的初始化脚本如下:
1
|
desired_caps_web = webdriver.DesiredCapabilities.CHROME
|
但同样,之前一直正常运行的脚本,到 docker 里不起作用。
看下docker selenium node 节点的log ,发现打印了如下信息:
1
|
Capabilities are: Capabilities {browserName: chrome, chromeOptions: {args: [lang=zh_CN.UTF-8], mobileEmulation: {deviceName: iPhone 6}}, goog:chromeOptions: {}, javascriptEnabled: true, version: }
|
多了个 goog:chromeOptions {} 的配置项是怎么回事?
认真看下,Capabilities 里我设置的 chromeOptions 已经正确传进来了,但是后面的 goog:chromeOptions: {} 似乎覆盖了对应的配置。
尝试下把脚本里的参数名称从 “chromeOptions ” 改为 “goog:chromeOptions” ,奇迹出现了:
1
|
Capabilities are: Capabilities {browserName: chrome, goog:chromeOptions: {args: [lang=zh_CN.UTF-8], mobileEmulation: {deviceName: iPhone 6}}, javascriptEnabled: true, version: }
|
脚本也能正常运行了,对应的浏览器语言、移动设备模拟设置也已生效!
于是修改对应脚本为:
1
|
desired_caps_web['goog:chromeOptions']=chrome_option
|
问题解决!