若是咱们UI自动化脚本跑在 Linux 服务器环境上,这个时候咱们是看不到界面的,若是不使用浏览器的无头模式,这个时候咱们的程序就跑不起来了,如何在服务器环境不使用浏览器的无头模式下进行UI测试呢,咱们能够经过 MobaXterm 和 X11 Forwarding 远程显示服务器上的图形化界面(GUI 程序)来实现。chrome
首先咱们来认识下什么是 X11 Forwarding ?它是用来干吗的?shell
如下介绍引用文章:windows
Linux 自己是没有图形化界面的,所谓的图形化界面系统只不过中 Linux 下的应用程序。这一点和 Windows 不同。Windows 从 Windows 95 开始,图形界面就直接在系统内核中实现了,是操做系统不可或缺的一部分。Linux 的图形化界面,底层都是基于 X 协议。浏览器
X 协议由 X server 和 X client 组成:服务器
举个例子,若是用户点击了鼠标左键,由于鼠标归 X server 管理,因而 X server 就捕捉到了鼠标点击这个动做,而后它将这个动做告诉 X client,由于 X client 负责程序逻辑,因而 X client 就根据程序预先设定的逻辑(例如画一个圆),告诉 X server 说:“请在鼠标点击的位置,画一个圆”。最后,X server 就响应 X client 的请求,在鼠标点击的位置,绘制并显示出一个圆。session
这么绕,有啥意义呢?固然有!ssh
许多时候 X server 和 X client 在同一台主机上,这看起来没什么。可是, X server 和 X client 彻底能够运行在不一样的机器上,只要彼此经过 X 协议通讯便可。因而,咱们就能够作一些“神奇”的事情,好比像本文开头谈到的,在本地显示 (X server),运行在服务器上的 GUI 程序 (X client)。这样的操做能够经过 SSH X11 Forwarding (转发) 来实现。工具
X11 中的 X 指的就是 X 协议,11 指的是采用 X 协议的第 11 个版本。测试
那 MobaXterm 又是什么鬼?MobaXterm 是一款开源、免费的、全功能终端软件。它与 PuTTY 相似,但却比 PuTTY 要强大得多,其中一个很实用的功能就是 MobaXterm 自带 X Server。这样咱们就不用劳神地去想怎么在 Windows 上启动 X server 了。
MobaXterm官网:https://mobaxterm.mobatek.net/
MobaXterm 下载:https://fenxiangdayuan.lanzous.com/ijMPOjxb43a
小结一下,整个实现逻辑就是:
本地机器采用 MobaXterm (自带 X server) 链接远程服务器。而后,在服务器上运行 GUI 程序 (即 X client),经过 SSH X11 Forwarding,转发到本地 (Windows 机器上)。
安装 X11 Forwarding 相关软件,执行命令:
yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock
启用 X11 Forwarding, 须要修改 ssh 的配置信息,以下
vi /etc/ssh/sshd_config
将 X11Forwarding 和 X11UseLocalhost 前面的 # 去掉,并将 X11Forwarding 设置为 yes,X11UseLocalhost 设置为 no :
#AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no X11Forwarding yes #X11DisplayOffset 10 X11UseLocalhost no
重启 sshd 服务:
systemctl restart sshd.service
下载并安装好 MobaXterm ,建立一个session,填写对应的配置信息远程链接到服务器
注意到 X11-forwarding 和 DISPLAY 这两项都打上了绿色的勾,表明设置成功了。
在服务器端运行一个 GUI 程序,例如输入命令:
xclock
这时候,你在本地 (Windows 端),就能够看到相应的图形化界面(窗口)
那么在咱们执行 UI自动化脚本的时候,就能够在本地(Windows 端)看到浏览器的执行过程了,例如在 Linux 系统启动 chrome 浏览器访问百度地址,输入命令:
chrome --no-sandbox https://www.baidu.com
咱们就能看到打开以下界面了:
若是打开的浏览器中文显示不出来(显示的都是小方块),这是由于服务器字体库没有对应字体的问题,参考下面的文章解决:
X11 Forwarding显示中文: