目录
前言
Selenium Grid
是Selenium
套件的一部分,它专门用于并行运行多个测试用例在不同的浏览器、操作系统和机器上。
Selenium Grid介绍
- Router : 路由,负责将请求转发到正确的组件。它是Grid的入口点,它将接收所有外部请求。路由器的行为取决于请求。如果是新的会话请求,则路由器会将其转发到“新会话队列”,该会话将其添加到“新会话队列”。
- Distributor:主要作用是接收新的会话请求并找到可以在其中创建会话的合适节点。创建会话后,分发服务器在会话映射中存储会话ID与正在执行会话的节点之间的关系。
-
Node:节点,可以在网格中出现多次。每个节点负责管理其所运行机器的可用浏览器的运行。。
- Session Map:用于保存会话ID和会话正在运行的节点的信息。它在将请求转发到节点的过程中为路由器提供支持。路由器将向会话映射询问与会话ID关联的节点。当以完全分布式模式启动Grid时,Session Map是应该启动的第一个组件。
- New Session Queue:新会话队列器,从路由器接收新的会话请求,并将其添加到队列中。排队器等待,直到收到请求的响应为止。如果请求超时,则该请求将立即被拒绝,并且不会添加到队列中
- Event Bus:分发服务器,新会话队列器和会话映射之间的通信路径。
下载selenium grid
- 地址:https://www.selenium.dev/downloads/
- 说明:selenium grid 实际上一个jar包,需要Java环境 ,配置环境文章:https://blog.csdn.net/IT_heima/article/details/111599703
运行selenium grid
文档:https://github.com/SeleniumHQ/selenium/wiki/Grid2
1. 命令行启动
step1:启动hub节点
- java -jar selenium-server-standalone-3.141.59.jar -role hub -port 4444
step2:启动node节点
- java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.96.1:4444/grid/register/ -port 4445
step3:编写脚本验证
# -*- coding: utf-8 -*-
# @Time : 2021/3/6
# @Author : 大海
from selenium import webdriver
ds = {'platform': 'ANY',
'browserName': "chrome",
'version': '',
'javascriptEnabled': True
}
driver = webdriver.Remote('http://192.168.96.1:4444/wd/hub', desired_capabilities=ds)
driver.get("https://www.baidu.com")
print(driver.name)
driver.quit()
2. Json配置文件启动
step1:创建hub配置文件
- 修改端口即可,保存为 hub_config.json文件
- 启动hub:java -jar selenium-server-standalone-3.141.59.jar -role hub -hubConfig hub_config
{
"port": 4444,
"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
}
step2:创建node配置文件
- 修改hub和port,其他保持不变即可,保存为 node_config.json文件
- 启动node:java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig node_config
{
"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": -1,
"register": true,
"registerCycle": 5000,
"hub": "hub地址",
"nodeStatusCheckTimeout": 5000,
"nodePolling": 5000,
"role": "node",
"unregisterIfStillDownAfter": 60000,
"downPollingLimit": 2,
"debug": false,
"servlets" : [],
"withoutServlets": [],
"custom": {}
}