1、Selenium Grid介紹
Selenium Grid在前面中有介紹,即三大元件之一,主要作用就是分布式執行測試
(1)selenium grid隻負責運作。是以我們的腳本還是需要利用Webdriver,在我們的開發環境中去寫好。
(2)selenium grid提供了hub和node。 hub被稱為總控節點,hub總管腳本代碼,加載所有的測試機 器,分發運作腳本。一個grid裡面隻有一個hub。
(3)node稱之為節點。好比連接配接網絡的各個終端裝置,可以有很多個node,node用于接收代碼,并在不同的浏覽器中運作代碼。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGL4EzXlpXazxSPJNTWmRWbihGbHJWQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1YjMyUDMwUTMzATOwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2、Selenium Grid的使用
(1)、前期準備
a、環境準備,因為selenium底層是用java實作的,是以需要安裝Java運作環境。
自行網上搜尋如何安裝JDK,并配置環境變量
b、安裝需要運作的浏覽器。
c、下載下傳浏覽器driver:
Chrome,https://npm.taobao.org/mirrors/chromedriver/
Firefox,https://github.com/mozilla/geckodriver/releases 放到和selenium server相同的路徑下(檢視) ,否則在啟動node時要加參數,不然啟動不了浏覽器,也可以指定路徑(java -Dwebdriver.chrome.driver=“C:\your path\chromedriver.exe” -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.100:5566/grid/register/,可切換浏覽器)。
d、下載下傳selenium server,将selenium-server-standalone-X.XX.jar分别放在“主機H”和“主機N”上(自定義路徑)。
下載下傳位址: https://www.selenium.dev/downloads/
(2)開啟hub服務
本次hub部署在虛拟機的Linux系統上,建立一個檔案夾命名為“Selenium_Grid”,把jar包和浏覽器驅動放入其中
執行: java -jar selenium-server-standalone-3.141.59.jar -role hub -port 4445
參數說明
-role 啟用程式角色為hub;
-port設定端口号,hub的預設端口也是4444
在浏覽器中檢視grid控制台: http://192.168.149.129:4445/grid/console
(3)新增node節點
在本機中任意一個盤符,新增一個檔案夾名稱自定義,我這邊取名為“Selenium_Grid”,cmd進入selenium server所在的路徑下,
執行:java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.149.129:4445/grid/register/ -port 5556
重新整理grid控制台:http://192.168.149.129:4445/grid/console
Browser中注冊了WebDriver:1個IE執行個體,5個Firefox執行個體,5個Chrome執行個體
拓展:同樣的hub和node也可以使用配置檔案啟動
a、hub:
在selenium-server-standalone-3.141.59.jar包所在目錄下新增hubConfig.json,内容如下
{
"port": 4445,
"newSessionWaitTimeout": -1,
"servlets": [],
"withoutServlets": [],
"custom": {},
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"registry": "org.openqa.grid.internal.DefaultGridRegistry",
"throwOnCapabilityNotPresent": true,
"cleanUpCycle": 5000,
"role": "hub",
"debug": false,
"browserTimeout": 0,
"timeout": 1800
}
執行啟動:java -jar selenium-server-standalone-3.141.59.jar -role hub -hubConfig hubConfig.json
b、node:
在selenium-server-standalone-3.141.59.jar包所在目錄下新增nodeConfig.json,内容如下
{ "capabilities": [{
"browserName": "firefox",
"marionette": true,
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "chrome",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "internet explorer",
"platform": "WINDOWS",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "safari",
"technologyPreview": false,
"platform": "MAC",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 5,
"port": 5556,
"register": true,
"registerCycle": 5000,
"hub": "http://192.168.149.129:4445",
"nodeStatusCheckTimeout": 5000,
"nodePolling": 5000,
"role": "node",
"unregisterIfStillDownAfter": 60000,
"downPollingLimit": 2,
"debug": false,
"servlets": [],
"withoutServlets": [],
"custom": {}
}
執行啟動:java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig nodeConfig.json
(4)使用Grid執行代碼
編寫代碼使用Remote連結hub,然後運作, hub會自動配置設定到節點(node)運作程式
from time import sleep
from selenium import webdriver
ds = {'platform': 'ANY', # 平台,作業系統
'browserName': "chrome", # 浏覽器
'version': '', # 浏覽器版本
'javascriptEnabled': True # 是否可以執行js
}
driver = webdriver.Remote('http://192.168.149.129:4445/wd/hub', desired_capabilities=ds)
driver.get("https://www.baidu.com")
driver.find_element_by_id('kw').send_keys("selenium")
driver.find_element_by_id('su').click()
sleep(3)
driver.quit()