Selenium grid 目前版本3.9.1 下载地址:http://selenium-release.storage.googleapis.com/index.html
Selenium grid是用来分布式执行测试用例脚本的工具,比如测试人员经常要测试多浏览器的兼容性,那就可以用到grid了。下面就来介绍如何在多个浏览器上运行同一份脚本。
它的工作原理是,Grid分布式测试由一个主节点hub和若干个node代理节点组成。hub用来管理各个代理节点的注册和状态信息,并且连接远程客户端的代码请求,然后再将请求的命令转发到代理节点执行。使用Grid远程执行测试代码与直接调用Selenium Server是一样的,只是环境启动的方式不一样,需同时启动一个hub和至少一个node。
- 1 在本地执行,启动一个hub和两个node,启动hub之后,再打开一个cmd执行node
java -jar selenium-server-standalone-xxx.jar -role hub - port 4444
(hub默认端口号为4444)
java -jar selenium-server-standalone-xxx.jar -role node - port 5555
(node默认端口号5555)
java -jar selenium-server-standalone-xxx.jar -role node - port 5556
若指定hub分配,执行顺序:由端口连接先后,一个线程一次一个端口,轮流执行,轮流完毕又从头开始。
通过浏览器打开http://127.0.0.1:4444/grid/console/
访问Grid的控制台,可以查看启动受控的节点node信息。
通过remote执行
import selenium
from selenium.webdriver import Remote
# 定义主机与浏览,放在字典里面
lists = {
"http://127.0.0.1:4444/wd/hub":"chrome",
"http://127.0.0.1:5555/wd/hub": "firefox",
"http://127.0.0.1:5556/wd/hub": "internet explore"
}
#通过不同的浏览器执行脚本
for host, browser in lists.items():
print(host,browser)
driver = Remote(command_executor=host,
desired_capabilities={ 'platform':'ANY',
'browserName':'',
'version':'',
'javascriptEnable':True
}
)
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys(browser)
driver.find_element_by_id("su").click()
driver.close()
该文件定义了一个方法,该方法存放了一个字典,分别给本机分配了2个不同的端口并指定了不同的浏览器。
最后我们运行测试脚本,可以看到三个浏览器运行结果
我们目前启动的hub 与node 都是在一台主机上。那么要在其它主机启动node 必须满足以下几个要求:
- 本地hub 主机与远程node 主机之间可以相互ping 通。
- 远程主机必须安装运行脚本的运行环境(Python 、Selenium、浏览器及浏览器驱动)。
- 远程主机必须安装java 环境,因为需要运行SeleniumServer。
WebDriver 所支持的驱动: