一、什么是Selenium Grid?
Selenium Grid是Selenium的三大组件之一,允许用户同时在不同的机器和系统上测试不同浏览器。 也就是说Selenium Grid支持分布式的测试执行。它可以让你的测试用例在一个分布式的执行环境中运行。
由下图可见,测试脚本会通过selenium hub节点分发给不同的node节点,而不同的node节点所在的操作系统和搭载的浏览器类型可以是不同的。
hub节点
- 中心节点,或总控节点
- 管理各个node节点的注册信息和状态信息
- 接收并转发客户端(测试脚本)请求到合适的node节点
node节点
- 子节点,或代理节点
- 负责注册配置信息到hub节点(平台、浏览器、浏览器版本等)
- 负责接收来自hub节点的转发的请求以执行测试脚本
- 也可单独作为远程节点执行测试脚本
二、环境准备
1. 下载selenium-server--<version>.jar
下载地址:http://selenium-release.storage.googleapis.com/index.html
2. 下载chromedriver
下载地址:https://registry.npmmirror.com/binary.html?path=chromedriver/
配置path: sudo mv /path/to/chromedriver /usr/local/bin
3. 启动hub
java -jar selenium-server-4.5.0.jar hub --host 127.0.0.1 --publish-events tcp://127.0.0.1:4442 --subscribe-events tcp://127.0.0.1:4443 --port 4444
启动成功之后,浏览器打开:http://127.0.0.1:4444
4. 启动node
第一个node
java -jar selenium-server-4.5.0.jar node --host 127.0.0.1 --publish-events tcp://127.0.0.1:4442 --subscribe-events tcp://127.0.0.1:4443 --port 5555
第二个node
java -jar selenium-server-4.5.0.jar node --host 127.0.0.1 --publish-events tcp://127.0.0.1:4442 --subscribe-events tcp://127.0.0.1:4443 --port 6666 --driver-configuration display-name="Chrome" max-sessions=2 webdriver-path="/usr/local/bin/chromedriver" stereotype='{"browserName":"chrome", "browserVersion": "105.0.5195.52", "goog:chromeOptions":{"binary":"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"}}' --detect-drivers false
三、代码配置
selenium代码
from selenium import webdriver
options = webdriver.ChromeOptions()
driver = webdriver.Remote(command_executor="http://127.0.0.1:4444", options=options)
driver.get("https://www.baidu.com")
print(driver.page_source)
driver.quit()
指定版本
from selenium import webdriver
options = webdriver.ChromeOptions()
options.set_capability("browserName", "chrome")
options.set_capability("browserVersion", "106.0")
driver = webdriver.Remote(command_executor="http://127.0.0.1:4444", options=options)
driver.get("https://www.baidu.com")
time.sleep(100)
print(driver.page_source)
driver.quit()