Selenium Grid-自动化分布式执行
Selenium Grid 简介
Selenium Grid 是 Selenium 的三大组件之一,允许用户同时在不同的机器和系统上测试不同浏览器。
也就是说 Selenium Grid 支持分布式的测试执行。它可以让你的测试用例在一个分布式的执行环境中运行。
由上图可见,测试脚本会通过 selenium hub 节点分发给不同的 node 节点,而不同的 node 节点所在的操作系统和搭载的浏览器类型可以是不同的,
hub 节点:
- 中心节点,或总控节点
- 管理各个 node 节点的注册信息和状态信息
- 接收并转发客户端(测试脚本)请求到合适的 node 节点
node 节点:
- 子节点,或代理节点
- 负责注册配置信息到 hub 节点(平台、浏览器、浏览器版本等)
- 负责接收来自 hub 节点的转发的请求以执行测试脚本
- 也可单独作为远程节点执行测试脚本
selenium grid 应用
环境说明:
- 本地端系统为 win10,搭载 V100 版本的 Chrome 浏览器,
- 远程端系统为 win7,搭载 V8 版本的 IE 浏览器,
- 两台主机能够相互 ping 通
- hub 节点和 node1 节点都是在本地端工作,node2 节点在远程端工作
环境准备步骤:
- 测试机器安装 JDK,配置环境变量
- 下载 selenium-server-standalone-x.x.x.jar
http://selenium-release.storage.googleapis.com/index.html?path=4.0/
3.下载浏览器驱动
注:IE 驱动和 selenium 依赖在一起
配置运行
1、本地端启动 hub
java -jar selenium-server-standalone-4.0.0-alpha-2.jar -role hub -port 8888 -maxSession 10
参数解释:
- Java -jar selenium-server-standalone-4.0.0-alpha-2.jar 运行 jar 包
- -role hub 以 hub 的角色运行
- -port 8888 指定 hub 运行的端口(默认为 4444)
- -maxSession 10 最大的处理会话
2、查看 hub 的运行状态
浏览器中输入 http://localhost:8888/grid/console 进入到到 hub 的 console 控制台
3、启动 node1
node1 节点工作在本地端,配置的浏览器为 V100 的 Chrome
java -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-4.0.0-alpha-2.jar -role node -hub "http://192.168.1.150:8888/grid/register/" -port 5558 -browser "browserName=chrome,maxInstances=2,version=100,platform=WINDOWS"
参数解释:
- -Dwebdriver.chrome.driver="chromedriver.exe" 指定 chromeDriver 驱动所在的路径(本地)
- -jar selenium-server-standalone-3.141.59.jar 运行 jar 包
- -role node 以 node 角色执行
- -hub "http://192.168.1.222:8888/grid/register" 指定要链接的 hub 地址,这样 node 才能和 hub 通讯连接上
- -port 5558 node 的执行端口
- -browser "browserName=chrome,maxInstances=2,version=68,platform=WINDOWS"
- browserName=chrome 运行的浏览器名称
- maxInstances=2 最多支持两个浏览器实例
- version=68 浏览器版本号
- platform=WINDOWS 平台名称
运行之后的效果:
浏览器再次刷新访问 hub 的 console 端:
4、启动远程端的 node2 节点
node2 节点工作在远程端,配置的浏览器为 V56 的 Chrome
启动配置为
java -Dwebdriver.firefox.driver="geckodriver.exe" -jar selenium-server-standalone-3.141.59.jar -role node -hub "http://192.168.140.1:8888/grid/register" -port 5558 -browser "browserName=firefox,maxInstances=2,version=56,platform=WINDOWS"
浏览器再次刷新访问 hub 的 console 端,可以看到两个 node 节点已经成功注册到 hub 节点上
我用的IE
java -Dwebdriver.ie.driver="IEDriverServer.exe" -jar selenium-server-standalone-4.0.0-alpha-2.jar -role node -hub "http://192.168.1.150:8888/grid/register/" -port 5558 -browser "browserName=ie,maxInstances=2,version=8,platform=WINDOWS"
配置多个浏览器:
java -Dwebdriver.ie.driver="IEDriverServer.exe" -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-4.0.0-alpha-2.jar -role node -hub "http://192.168.1.150:8888/grid/register" -port 5555 -browser "browserName=internet explorer,maxInstances=2,version=8,platform=WINDOWS" -browser "browserName=chrome,maxInstances=3,version=100,platform=WINDOWS"
poython 代码
1 import time 2 3 from selenium import webdriver 4 5 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 6 7 driver = webdriver.Remote( 8 9 command_executor='http://localhost:8888/wd/hub', 10 11 desired_capabilities=DesiredCapabilities.CHROME) 12 13 # driver = webdriver.Chrome() 14 15 driver.get('http://www.baidu.com') 16 17 print(driver.title) 18 time.sleep(3) 19 20 driver.quit()
问题1:webdriverException
command_executor的url地址,验证了必须是本地(localhost或者127.0.0.1)才可以,否则会报webdriverException

driver = webdriver.Remote(
command_executor='http://?:port/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
测试登录代码:
1 import time 2 3 from selenium import webdriver 4 from selenium.webdriver.common.by import By 5 6 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 7 8 driver = webdriver.Remote( 9 command_executor='http://localhost:4444/wd/hub', 10 # desired_capabilities=DesiredCapabilities.CHROME) 11 desired_capabilities={'platform': 'ANY', 12 'browserName': 'chrome', 13 'version': '', 14 'javascriptEnabled': True 15 }) 16 17 # driver = webdriver.Chrome() 18 19 driver.get('http://ip:1110/') 20 21 print(driver.title) 22 time.sleep(3) 23 driver.find_element(By.XPATH, '//input[@placeholder="账号"]').send_keys("admin") 24 driver.find_element(By.XPATH, '//input[@placeholder="密码"]').send_keys("1")# .click() 25 driver.find_element(By.XPATH, '//span[text()="登录"]').click() 26 27 28 time.sleep(3) 29 print(driver.title) 30 time.sleep(5) 31 driver.quit()
爬虫存在安全验证

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!