文章目录

近期做CI自动化持续集成,这里主要介绍一下使用Selenium Grid实现Remote实例,远程测试机自动跑用例的步骤。

配置环境

  1. 下载Selenium Server,因为Selenium Grid功能已集成到Selenium Server中,所以需要下载Selenium Server,才可以使用Grid2功能;
  2. 配置Java环境,安装jdk,配置环境变量,这块就不多说了;

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# encoding: utf-8

from selenium import webdriver
from selenium.webdriver import Remote
import time,re
import unittest

#定义主机与浏览器
lists = {
#'http://127.0.0.1:4444/wd/hub':'chrome',
#'http://127.0.0.1:5556/wd/hub':'firefox'
#'http://192.168.74.129:5555/wd/hub':'internet explorer'
#'http://192.168.74.129:5555/wd/hub':'internet explorer'
#注意这里是设置远程机器的ip与端口
'http://192.168.38.43:7777/wd/hub':'chrome',
'http://192.168.38.37:5555/wd/hub':'chrome'
#'http://192.168.39.6:5555/wd/hub':'chrome'
}


#调用Remote方法
for host,browser in lists.items():
print(host,browser)

driver = Remote(command_executor=host,
desired_capabilities={'platform':'ANY',
'browserName':browser,
'version':'',
'javascriptEnabled':True
}
)

driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("Selenium2")
driver.find_element_by_id("su").click()
time.sleep(3)

driver.close()

操作步骤

这里先说明一下原理:
一个hub主节点和若干node代理节点组成。hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。

前提:

a. 本地hub主机与远程node主机之间可以用ping命令连通;
b. 远程主机必须安装用例执行的浏览器及驱动,并且驱动要放在环境变量path的目录下。
c. 远程主机必须安装java环境,因为需要运行Selenium Server。

  1. 启动本地hub主机(本地ip:192.168.38.41),进入Selenium Server jar包目录下,执行命令
1
java -jar selenium-server-standalone-2.47.1.jar -role hub

如图:

  1. 启动远程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

如图:

  1. 执行用例,查看远程机器:

如图:

谷歌运行报错分析

远程调用谷歌时,报错“请停用以开发者模式运行的扩展程序”:

试了很多方法都没有解决,包括把插件加入白名单,或者删掉插件,最后发现,是谷歌的驱动版本太老,不支持最新版谷歌的原因:
报错截图:

解决方法:

node机器,下载最新的谷歌版本,与谷歌驱动,进行替换,问题就解决了。

ps:注意,要把下载的谷歌驱动与selenium server放到环境变量下。

实现多台node主机线程跑

看到我粘贴的代码了,创建list字典,定义不同的ip,端口号及浏览器。然后,通过for循环读取lists字典中的数据作为Remote()的配置信息,从而使脚本在不同的节点及浏览器下执行。
当然,也可以并发多个Node测试机同时跑用例,使用python多进程技术,后面会讲到。

文章目录