selenium grid的分布式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册信息和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令转发给代理节点来执行。
Selenium Grid环境部署 下载selenium-server-standalone jar包下载地址
这里我选择下载的版本是selenium-server-standalone-3.9.1.jar
在命令窗口进入selenium-server-standalone-3.9.1.jar存放的目录,如E:seleniumGrid
输入以下命令,将本机当做hub启动
java -jar selenium-server-standalone-3.9.1.jar -role hub -maxSession 10 -port 4444
注意:启动hub时不可以关闭命令行窗口
命令参数:
-role hub表示启动运行hub;
-port是设置端口号,hub的默认端口是4444,这里使用的是默认的端口,当然可以自己配置;
-maxSession为最大会话请求,这个参数主要要用并发执行测试用例,默认是1,建议设置10及以上
每次启动hub都要重新输入命令,如果嫌麻烦可以在一个txt文件中写入命令然后改文件后缀名为bat双击启动
浏览器输入http://localhost:4444/grid/console,如果成功显示一下页面则启动成功
启动hub后,就需要运行节点,最少都要有一个node节点,而node节点可以与hub在同一台机器上运行。
现在本机启动一个节点Node1,输入命令java -jar selenium-server-standalone-3.9.1.jar -role node -port 5555 -hub http://192.168.1.79:4444/grid/register -maxSession 5 -browser browserName=chrome,version=73,seleniumProtocol=WebDriver,maxInstances=5
注意:启动Node时也不可以关闭命令行窗口
命令参数:
-role node:表示启动的是node节点
-port 5555:指定node节点端口
-hub http://192.168.1,79:4444/grid/register:表示hub机地址
-maxSession 5:node节点最大会话请求
-version:浏览器版本,可自己定义
-browser browserName=chrome,seleniumProtocol=WebDriver,maxInstances=5:=设置浏览器的参数,browserName表示浏览器名字,如chrome、firefox、ie;maxInstances表示最大实例,可以理解为最多可运行的浏览器数,这个值很关键,不能大于前面maxSession的值,否则可能会出错
此时刷新http://localhost:4444/grid/console页面可以发现新的节点已经添加点Configuration可以查看节点的详细信息
在另一部主机上启动node节点2
需要注意:这部主机需要能够和hub主机ping通,并且也同样需要配置python环境,安装selenium以及安装浏览器驱动,不然会报错。
在另一部主机启动命令行窗口,同样进入存放selenium-server-standalone-3.9.1.jar目录下,输入命令:
java -jar selenium-server-standalone-3.9.1.jar -role node -port 5555 -hub http://192.168.1.79:4444/grid/register -maxSession 5 -browser browserName=chrome,version=73,seleniumProtocol=WebDriver,maxInstances=5
刷新http://localhost:4444/grid/console页面可以发现新的节点已经添加
通过hub主机操纵node节点主机访问网页
from selenium import webdriver
option=webdriver.ChromeOptions()
option.set_capability('browserName','chrome') # 指定远程计算机执行使用的浏览器为chrome
option.set_capability('platform','WINDOWS') # 远程计算机的平台
try:
#command_executor指定Node节点主机
driver = webdriver.Remote(command_executor='http://192.168.1.89:5555/wd/hub', options=option)
driver.get('http://www.baidu.com')
print(driver.page_source)
except Exception:
print(Exception)
可以发现由hub主机运行的代码,实际是在节点Node2主机(ip:192.168.1.89)上访问百度页面的,而返回的网页源码是直接在hub主机上输出的。
参考文章:https://blog.csdn.net/ouyanggengcheng/article/details/79935657



