一、工作原理:
Grid 是用于设计帮助我们进行分布式测试的工具,其整个结构有一个hub主节点和若干个node代理节点组成。hub用来管理各个子节点的注册和状态信息,并接收远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。使用Grid远程执行测试的代码与直接调用Selenium Server是一样的,只是环境启动的方式不一样,需要同时启动一个hub和至少一个node。
二、环境配置:
1.下载selenium server,地址:https://www.seleniumhq.org/ ;
2.由于运行jar需要有对应的java环境,所以提前需要有java环境,java环境配置详见:https://blog.csdn.net/weixin_37579123/article/details/83855873;根据jdk环境,选择对应版本的selenium-server-standalone-xxx.jar ;
三、实践步骤:
准备两台机器A和B,要求已经安装好环境;
1.将A机器作为hub中控机,进入到jar文件所在的目录下执行:java -jar selenium-server-standalone-3.141.59.jar -role hub
可以访问提示的网址来查看节点机,此时还没有节点连接!
2.将B机器作为节点机连接,进入到jar文件所在的目录下执行:(IP地址需要注意更改,输入A机器的启动地址)
java -jar selenium-server-standalone-3.141.59.jar -role webdriver -hub http://10.168.65.95:4444/grid/register-Dwebdriver.chrome.driver="d:\chromedriver.exe" -port 6666 -maxSession 5 -browser browserName="chrome",maxInstances=5
节点机注册成功后提示:The node is registered to the hub and ready to use
3.此时在A机器访问http://192.168.221.2:4445/grid/console ,可以查看到节点机的连接情况
4.在A机器上运行测试脚本,可以看到实际启动浏览器是在B机器上操作的;(注意:B机器上需要安装相应的浏览器驱动)
encoding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Remote(
设定Node节点的URL地址,后续将通过访问这个地址连接到Node计算机
command_executor = 'http://192.168.221.2:4445//wd/hub', # 要和节点机显示的ip地址一样
desired_capabilities = {
# 指定远程计算机执行使用的浏览器为chrome;或者internet explorer/firefox
"browserName": "chrome",
"video": "True",
# 远程计算机的平台
"platform": "WINDOWS"
})
try:
driver.implicitly_wait(10)
driver.maximize_window()
driver.get("http://www.sogou.com")
assert u"搜狗" in driver.title
elem = driver.find_element_by_id("query")
elem.send_keys("自动化测试")
elem.send_keys(Keys.RETURN)
time.sleep(3)
assert "自动化" in driver.page_source
print ('done!')
finally:
driver.quit()
5.同时启动多个浏览器命令:
java -jar selenium-server-standalone-3.141.59.jar -role webdriver -hub
http://192.168.221.2:4445/grid/register-Dwebdriver.chrome.driver="d:\chromedriver.exe"-Dwebdriver.ie.driver="e:\IEDriverServer.exe"-Dwebdriver.firefox.driver="e:\geckodriver.exe" -port 4445 -maxSession 5 -browser browserName="internet explorer",maxInstances=5 -browser browserName="chrome",maxInstances=5 -browser browserName="firefox",maxInstance=5
同理,如果有需求,可以扩展节点机,增加节点机的连接数量,同时可修改测试脚本来实现多线程远程执行;