这一篇是上一篇 当selenium遇上docker 的续集,重点介绍 selenium-docker 的使用和调试、设置桌面和安装中文字体。 查看控制台 standalone 的容器正常运行后,用浏览器打开 http://容器地址:4444 ,可以看到如下的界面: 点击红色箭头指向的链接,可以进入 session 管理界面: {.framed} 这个界面下可以手动添加浏览器实例(session),不过我们主要用来监控自动运行的浏览器。 测试脚本开始运行后,session 管理界面会显示当前 chrome 的个数和对应的 capabilities,如图中红色箭头所指。下图中,一共有4个 chrome 线程同时运行。 {.framed} 内存问题 像上图一样在容器里开启多个浏览器 session 时,容易产生内存不足,使新开的浏览器崩溃,只能开启一个 session。有两种解决办法: 将宿主机的共享内存映射到容器内 \$ docker run **-v /dev/shm:/dev/shm** \[其他参数...\] selenium/standalone-chrome 或者 指定 shm-size 为2GB \$ docker run ---shm-size=2g \[其他参数...\] selenium/standalone-chrome 远程桌面调试 Windows 环境下可以使用 VNC viewer 连接 selenium debug 容器,而 Mac 则自带了远程桌面工具。 使用方法是: 在 Finder 的图标上点右键,右键菜单选择 Connect to Server… 填入 vnc://容器地址+端口,比如映射在本地5901端口,那么填入 默认密码是 secret 有读者可能会问,这个 secret 密码从哪里来的? 在 基础镜像 selenium/base 的Dockerfile,其中有设置用户和添加密码的步骤: #======================================== # Add normal user with passwordless sudo #======================================== RUN useradd seluser \ # 添加默认用户 seluser --shell /bin/bash \ --create-home \ && usermod -a -G sudo seluser \ && echo 'ALL ALL = (ALL) NOPASSWD: ALL' >> /etc/sudoers \ && echo 'seluser:secret' | chpasswd # 为 seluser 设置密码 #=================================================== # Run the following commands as non-privileged user #=================================================== USER seluser # 切换到 seluser 用户 从上面的 Dockerfile 能看出,在所有的selenium镜像里,都使用了seluser这个默认用户,所以如果你要以这些镜像为基础制作自定义镜像,要记得seluser的身份连上远程桌面后,将看到ubuntu的黑白logo 用你的测试代码打开远程页面后,将可以监控到虚拟浏览器的页面,方便调试。 设置虚拟桌面xvfb web UI 自动化里,浏览器视口(View Port)是很重要的参数,它能影响到元素的定位、页面的滚动等许多行为,也直接影响了测试用例的成败。 虚拟桌面的大小,将间接的影响和限制浏览器视口的大小,在VNC浏览器里可以直观的看到虚拟桌面的分辨率。那么在selenium-debug镜像里,如何设置虚拟桌面xvfb的分辨率? 我们看 基础镜像 selenium/NodeBase 的Dockerfile,里面这么设置环境变量: ENV SCREEN_WIDTH 1360\ ENV SCREEN_HEIGHT 1020\ ENV SCREEN_DEPTH 24 所以我们只要启动自己的selenium容器时,设置好环境变量,就可以指定虚拟桌面的分辨率。 如何安装中文字体 在3.11版之前,chrome的镜像里是不包含中文字体的,浏览中文页面时,汉字将显示为一个一个的方框。为了解决这个问题,需要自己根据官方的镜像,定义自己的Dockerfile,下面举个栗子: FROM selenium/standalone-chrome-debug LABEL maintainer="LFhacks.com" RUN sudo apt-get update -y && sudo apt-get -y install ttf-wqy-microhei 上面这个Dockerfile在官方镜像的基础上,安装了文泉驿细黑字体,使用这个镜像,可以正常显示中文。 从3.11版开始,chrome镜像里预装了中文字体,详见 基础镜像 selenium/NodeBase 的Dockerfile 有安装字体库的部分: 1. Font libraries\ \# 2. libfontconfig \~1 MB 3. libfreetype6 \~1 MB 4. xfonts-cyrillic \~2 MB 5. xfonts-scalable \~2 MB 6. fonts-liberation \~3 MB 7. fonts-ipafont-gothic \~13 MB 8. fonts-wqy-zenhei \~17 MB 9. fonts-tlwg-loma-otf \~300 KB 10. ttf-ubuntu-font-family \~5 MB 11. Ubuntu Font Family, sans-serif typeface hinted for clarity 12. Removed packages: 13. xfonts-100dpi \~6 MB 14. xfonts-75dpi \~6 MB 15. Regarding fonts-liberation see: 16. https://github.com/SeleniumHQ/docker-selenium/issues/383#issuecomment-278367069 17. Layer size: small: 36.28 MB (with ---no-install-recommends) 18. Layer size: small: 36.28 MB\ RUN apt -qqy update \\\ && apt -qqy ---no-install-recommends install \\\ libfontconfig \\\ libfreetype6 \\\ xfonts-cyrillic \\\ xfonts-scalable \\\ fonts-liberation \\\ fonts-ipafont-gothic \\\ fonts-wqy-zenhei \\\ fonts-tlwg-loma-otf \\\ ttf-ubuntu-font-family \\\ && rm -rf /var/lib/apt/lists/\* \\\ && apt -qyy clean