准备
- java 11
https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.html
- selenium grid4
- chromedriver[106]
https://chromedriver.chromium.org/downloads
- python
- selenium
- docker
- allure
- selenium-server-4.5.3.jar
https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.6.0
1. selenium grid4 安装
Ⅰ 快速入门阶段
前提是一定要下载个 selenium 三件套,如果连三件套都不知道是什么就自行百度,谢谢
官方文档: https://www.selenium.dev/documentation/grid/getting_started/
将浏览器驱动 chromedriver.exe
和 selenium-server-4.5.3.jar
下载完成后,放置到一个文件夹,使用下面命令进行启动
-
默认端口: java -jar selenium-server-<version>.jar standalone
-
自定义端口:java -jar selenium-server-<version>.jar standalone --port 5555
-
http://localhost:4444 进行登录
这个就是启动成功的图片
怎么让有会话呢,直接写代码
以下是 这是官方代码的,要进行更改的
from selenium import webdriver
firefox_options = webdriver.FirefoxOptions()
driver = webdriver.Remote(
command_executor='http://www.example.com', // 这个URL 要改成你的selenium 监控地址
options=firefox_options
)
driver.get("http://www.google.com")
driver.quit()
这是我的代码
from selenium import webdriver
import time
chrom_options = webdriver.ChromeOptions()
driver= webdriver.Remote(
command_executor="http://192.168.1.6:4444", //这边是更改后的代码
options=chrom_options
)
driver.get("http://www.baidu.com")
time.sleep(222222)
driver.quit()
成功标志如下,到这里说明最简单的已经成功了
2. grid 一共有4中方式
第一种方式: 独立,node和hub 在一台电脑上
适用范围:
- 使用本地开发或调试测试RemoteWebDriver
- 推送代码前运行快速测试套件
- 在CI/CD中设置一个易于的网格
先配置jenkins 进行测试,后面都会用
- jenkins 安装插件 selenium 和selenium Capability Axis
第二步,选择系统配置
默认就行了
新建任务
点击保存,到任务中心点击运行即可
第二种方式: 中心和节点
说明:
- 最常用
- 不同的机器组合在一起
- 具备单个入口,在不同环境运行测试
- 不破坏网络情况下扩展和减少容量
HUB的组成:路由,分发服务器,会话映射、新建会话队列和事件总线
启动hub(同一台计算机)
java -jar selenium-server-<version>.jar hub
启动node
节点1
java -jar selenium-server-<version>.jar node --port 5555
节点2
java -jar selenium-server-<version>.jar node --port 6666
如下
启动hub(不同计算机)PS:两台计算能ping 同
默认端口 4444, 后台登陆地址:ip:4444
A机器作为hub :java -jar selenium-server-4.5.3.jar hub
B机器作为node java -jar selenium-server-4.5.3.jar node --hub http:// A机器的IP:4444
不是默认端口, 后台登陆地址:ip:6666
A机器作为hub java -jar selenium-server-4.5.3.jar hub --port 6666
B机器作为node java -jar selenium-server-4.5.3.jar node --hub http:// A机器的IP:4444
3.使用docker 进行操作
把头三个下载到docker 里面
第一个是服务+hub 第二个是hub 第三个是节点
关于standalone 和hub
关于selenium/standalone-chrome 和selnium/hub 的区别,个人理解在于,前者已经集成了hub,就不用在启动hub了,在docker standalone 和hub 是不能一起启动的,启动就报错了
如果想进行多线程操作,就需要对运行几个node 代码如下:
建议改下 --name 的名字 好区分
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub --shm-size="2g" -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 --name mynode1 selenium/node-chrome
第一个启动方式如下:
直接本地IP:4444 就能打开
docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" selenium/standalone-chrome
测试代码
有的网上用的是这个参数 desired_capabilities 运行时会进行提示的,报错内容如下
DeprecationWarning: desired_capabilities has been deprecated, please
pass in an Options object with options kwarg
意思就是 这个 desired_capabilities 东西不用了,废弃了,请用 options 这个参数好不好
@allure.title('分布式启动')
@pytest.fixture(scope='session', name='grid_edge')
def grid_edge():
global driver
selenium_grid_url = "http://192.168.3.202:4444/wd/hub"
# CHROME = {"browserName": "chrome"}
edge_options = webdriver.ChromeOptions()
driver = webdriver.Remote(options=edge_options,
command_executor=selenium_grid_url)
vnc 密码:
可以使用vnc 查看过程,前提是程序在运行,他的密码是secret
docker run -d --net grid -e SE_EVENT_BUS_HOST =selenium-hub \
--shm-size= " 2g " \
-e SE_EVENT_BUS_PUBLISH_PORT=4442 \
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
--name selenium-node-chrme1 selenium/node-chrome
``加粗样式`
https://github.com/SeleniumHQ/docker-selenium