Selenium+Grid Remote实例与谷歌运行报错分析
文章目录
近期做CI自动化持续集成,这里主要介绍一下使用Selenium Grid实现Remote实例,远程测试机自动跑用例的步骤。
配置环境
- 下载Selenium Server,因为Selenium Grid功能已集成到Selenium Server中,所以需要下载Selenium Server,才可以使用Grid2功能;
- 配置Java环境,安装jdk,配置环境变量,这块就不多说了;
代码
1 | # encoding: utf-8 |
操作步骤
这里先说明一下原理:
一个hub主节点和若干node代理节点组成。hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。
前提:
a. 本地hub主机与远程node主机之间可以用ping命令连通;
b. 远程主机必须安装用例执行的浏览器及驱动,并且驱动要放在环境变量path的目录下。
c. 远程主机必须安装java环境,因为需要运行Selenium Server。
- 启动本地hub主机(本地ip:192.168.38.41),进入Selenium Server jar包目录下,执行命令
1 | java -jar selenium-server-standalone-2.47.1.jar -role hub |
如图:
- 启动远程node主机(node主机ip:192.168.38.37),同样的,进入Selenium Server jar包目录下,执行命令
1 | java -jar selenium-server-standalone-2.47.1.jar -role node -port 5555 -hub http://192.168.38.41:4444/grid/register |
如图:
- 执行用例,查看远程机器:
如图:
谷歌运行报错分析
远程调用谷歌时,报错“请停用以开发者模式运行的扩展程序”:
试了很多方法都没有解决,包括把插件加入白名单,或者删掉插件,最后发现,是谷歌的驱动版本太老,不支持最新版谷歌的原因:
报错截图:
解决方法:
node机器,下载最新的谷歌版本,与谷歌驱动,进行替换,问题就解决了。
ps:注意,要把下载的谷歌驱动与selenium server放到环境变量下。
实现多台node主机线程跑
看到我粘贴的代码了,创建list字典,定义不同的ip,端口号及浏览器。然后,通过for循环读取lists字典中的数据作为Remote()的配置信息,从而使脚本在不同的节点及浏览器下执行。
当然,也可以并发多个Node测试机同时跑用例,使用python多进程技术,后面会讲到。