1.原理
Grid 是用于设计帮助我们进行分布式测试的工具,其整个结构有一个hub主节点和若干个node代理节点组成。hub用来管理各个子节点的注册和状态信息,并接收远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。使用Grid远程执行测试的代码与直接调用Selenium Server是一样的,只是环境启动的方式不一样,需要同时启动一个hub和至少一个node。
2.环境配置
1.下载selenium server,地址:https://www.seleniumhq.org/ 或者http://selenium-release.storage.googleapis.com/index.html
2.由于运行jar需要有对应的java环境,所以提前需要有java环境,java环境配置详见:https://blog.csdn.net/weixin_37579123/article/details/83855873;根据jdk环境,选择对应版本的selenium-server-standalone-xxx.jar ;
3.分布节点启动
1.主节点(作为控制节点)
java -Dwebdriver.chrome.driver=/usr/bin/chromedriver -jar selenium-server-standalone-3.141.0.jar -role hub
可以通过访问http://主节点ip:4444/grid/console查看节点配置及从节点
2.从节点
java -jar selenium-server-standalone-3.141.0.jar -role node -port 4445 -hub http://主节点ip:4444/grid/register -maxSession 5 -browser browserName=chrome,version=103,seleniumProtocol=WebDriver,maxInstances=5
4.执行脚本
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.webdriver import RemoteWebDriver
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--start-maximized')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--disable-gpu')
#主节点
node = 'http://主节点ip:4444/wd/hub'
# node = 'http://从主节点ip:4445/wd/hub'
b = RemoteWebDriver(command_executor=node, desired_capabilities=chrome_options.to_capabilities())
b.get('https://www.baidu.com/')
b.find_element_by_id('kw').send_keys('python')
b.close()
b.quit()