1、Selenium Grid介绍
Selenium Grid在前面中有介绍,即三大组件之一,主要作用就是分布式执行测试
(1)selenium grid只负责运行。所以我们的脚本还是需要利用Webdriver,在我们的开发环境中去写好。
(2)selenium grid提供了hub和node。 hub被称为总控节点,hub总管脚本代码,加载所有的测试机 器,分发运行脚本。一个grid里面只有一个hub。
(3)node称之为节点。好比连接网络的各个终端设备,可以有很多个node,node用于接收代码,并在不同的浏览器中运行代码。
2、Selenium Grid的使用
(1)、前期准备
a、环境准备,因为selenium底层是用java实现的,所以需要安装Java运行环境。
自行网上搜索如何安装JDK,并配置环境变量
b、安装需要运行的浏览器。
c、下载浏览器driver:
Chrome,https://npm.taobao.org/mirrors/chromedriver/
Firefox,https://github.com/mozilla/geckodriver/releases 放到和selenium server相同的路径下(查看) ,否则在启动node时要加参数,不然启动不了浏览器,也可以指定路径(java -Dwebdriver.chrome.driver=“C:\your path\chromedriver.exe” -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.100:5566/grid/register/,可切换浏览器)。
d、下载selenium server,将selenium-server-standalone-X.XX.jar分别放在“主机H”和“主机N”上(自定义路径)。
下载地址: https://www.selenium.dev/downloads/
(2)开启hub服务
本次hub部署在虚拟机的Linux系统上,新建一个文件夹命名为“Selenium_Grid”,把jar包和浏览器驱动放入其中
执行: java -jar selenium-server-standalone-3.141.59.jar -role hub -port 4445
参数说明
-role 启用程序角色为hub;
-port设置端口号,hub的默认端口也是4444
在浏览器中查看grid控制台: http://192.168.149.129:4445/grid/console
(3)新增node节点
在本机中任意一个盘符,新增一个文件夹名称自定义,我这边取名为“Selenium_Grid”,cmd进入selenium server所在的路径下,
执行:java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.149.129:4445/grid/register/ -port 5556
刷新grid控制台:http://192.168.149.129:4445/grid/console
Browser中注册了WebDriver:1个IE实例,5个Firefox实例,5个Chrome实例
拓展:同样的hub和node也可以使用配置文件启动
a、hub:
在selenium-server-standalone-3.141.59.jar包所在目录下新增hubConfig.json,内容如下
{
"port": 4445,
"newSessionWaitTimeout": -1,
"servlets": [],
"withoutServlets": [],
"custom": {},
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"registry": "org.openqa.grid.internal.DefaultGridRegistry",
"throwOnCapabilityNotPresent": true,
"cleanUpCycle": 5000,
"role": "hub",
"debug": false,
"browserTimeout": 0,
"timeout": 1800
}
执行启动:java -jar selenium-server-standalone-3.141.59.jar -role hub -hubConfig hubConfig.json
b、node:
在selenium-server-standalone-3.141.59.jar包所在目录下新增nodeConfig.json,内容如下
{ "capabilities": [{
"browserName": "firefox",
"marionette": true,
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "chrome",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "internet explorer",
"platform": "WINDOWS",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "safari",
"technologyPreview": false,
"platform": "MAC",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 5,
"port": 5556,
"register": true,
"registerCycle": 5000,
"hub": "http://192.168.149.129:4445",
"nodeStatusCheckTimeout": 5000,
"nodePolling": 5000,
"role": "node",
"unregisterIfStillDownAfter": 60000,
"downPollingLimit": 2,
"debug": false,
"servlets": [],
"withoutServlets": [],
"custom": {}
}
执行启动:java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig nodeConfig.json
(4)使用Grid执行代码
编写代码使用Remote链接hub,然后运行, hub会自动分配到节点(node)运行程序
from time import sleep
from selenium import webdriver
ds = {'platform': 'ANY', # 平台,操作系统
'browserName': "chrome", # 浏览器
'version': '', # 浏览器版本
'javascriptEnabled': True # 是否可以执行js
}
driver = webdriver.Remote('http://192.168.149.129:4445/wd/hub', desired_capabilities=ds)
driver.get("https://www.baidu.com")
driver.find_element_by_id('kw').send_keys("selenium")
driver.find_element_by_id('su').click()
sleep(3)
driver.quit()