无头浏览器在WEB页面自动化测试中的使用

原新浪博客(http://blog.sina.com.cn/billsona)搬迁至此。


前言

众所周知,linux的稳定性比windows要高出几个层次。很多自动化测试或者持续集成或者DevOps的人可能会碰到这种苦恼,做WEB页面自动化测试的时候,windows机器不够稳定,经常分析半天自动化执行失败的用例是环境不稳定导致的。另外,为了稳定运行,持续集成的服务器基本上也是以linux为主。本文会教你如何在linux下完成web页面自动化测试,而不需要像传统的一样必须有显示界面,必须要真正的打开浏览器。
先说一说无头浏览器(headless browser)。无头浏览器是指的没有GUI的浏览器,用人话说就是浏览器运行的时候,不依赖操作系统的图形用户界面,浏览器的运行,操作全部是在内存中进行的。无头浏览器在网络爬虫以及WEB界面自动化测试中已经在广泛运用。目前业界主流的无头浏览器主要有PhantomJS和Headless Chrome。 Headless Chrome是google开发的,目前已经合并到Google Chrome当中去了,也就是说,当前的Chrome支持headless方式调用。并且Google宣称能够完全兼容Google Chrome上的操作。
本文主要介绍的是CentOS7(我们的CICD服务器是CentOS7)下使用Headless Chrome+Selenium+RobotFramework进行web界面自动化测试的实践。


一、安装Chrome和chromedriver

1. 安装Google Chrome

 下载RPM安装包
 # wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
 安装下载的RPM包
 # yum install -y google-chrome-stable_current_x86_64.rpm
 如果要卸载安装的Chrome,可以用命令yum autoremove -y google-chrome (**注意:这个命令我本人并没有进行验证可用性**)。
 升级glib2库
 # yum update glib2 -y
 查看安妆的Chrome版本
 # /opt/google/chrome/chrome --version
 如果显示类似如下图的内容,则基本上说明安装成功。

在这里插入图片描述

2. 安装chromedriver

 下载安装包(注意:一定要下载跟chrome版本对应的driver)
 # wget https://chromedriver.storage.googleapis.com/77.0.3865.40/chromedriver_linux64.zip
 解压zip包
 # uzip -d /opt/chromedrivers/ chromedriver_linux64.zip
 将解压后的文件放到/opt/drivers目录下
 # mkdir -p /opt/drivers
 # mv chromedriver /opt/drivers/

3. 配置PATH环境变量

 在配置文件/etc/profile中把chromedriver的存放路径/opt/drivers添加到文件中PATH环境变量中,如下图所示,添加后保存退出。

在这里插入图片描述
执行下面命令让修改的环境变量生效

 # source /etc/profile

4. 关于修改/etc/hosts文件

 在有的资料中,特别说明了将127.0.0.1环回地址绑定到localhost,这一操作的具体意义目前我并没有去深究。但是在我的实践中,如果不做这个绑定,不会影响具体的执行。

二、安装RobotFramework和robotframework-selenium2library库

这些都是在安装好python以后,通过pip install命令去安装的,这里不再赘述。要提醒的是,现在这一套工具集在python3.x运行兼容性良好,python2.x马上就停止维护了,尽量用新的3.x版。

三、踩过的坑

error: DevToolsActivePort file doesn’t exist

 这个错误的主要原因是robot framework中调用运行chrome的时候,没有指定相关参数,或者参数指定不正确。
 举个例子,平时我们设计测试用例时,如果使用Open Browser方法,只要指定浏览器中要打开的地址,以及使用的浏览器类型就行了,如下如图所示。

在这里插入图片描述
但是在linux下,因为没有图形界面,要采用leadless方式调用,得用如下的写法。
在这里插入图片描述
需要注意的是,对于以上写用例的风格请不要参考,这不是一种好的方式,能参数化的地方尽量参数化,这样将来的用例维护成本会很低。

WebDriverException: Message: ‘chromedriver’ executable needs to be in PATH

linux主机上已经设置了对应的PATH,用命令行手动执行完全正常,该问题仅在jenkins中执行的时候才会出现。这主要是因为Jenkins没法获取linux主机的PATH信息,因此也找不到对应的chromedriver。解决办法就是在jenkins中设置这个PATH。 在Jenkins中找到对应的linux主机的node的设置,添加PATH变量。如下图所示。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lipeixinglive/article/details/113695973