天天看點

七.Python+Selenium自動化測試系列: Selenium Grid

1、Selenium Grid介紹

Selenium Grid在前面中有介紹,即三大元件之一,主要作用就是分布式執行測試

(1)selenium grid隻負責運作。是以我們的腳本還是需要利用Webdriver,在我們的開發環境中去寫好。

(2)selenium grid提供了hub和node。 hub被稱為總控節點,hub總管腳本代碼,加載所有的測試機      器,分發運作腳本。一個grid裡面隻有一個hub。

(3)node稱之為節點。好比連接配接網絡的各個終端裝置,可以有很多個node,node用于接收代碼,并在不同的浏覽器中運作代碼。

七.Python+Selenium自動化測試系列: Selenium Grid

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

七.Python+Selenium自動化測試系列: Selenium Grid

在浏覽器中檢視grid控制台: http://192.168.149.129:4445/grid/console

七.Python+Selenium自動化測試系列: Selenium Grid

(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

七.Python+Selenium自動化測試系列: Selenium Grid

 重新整理grid控制台:http://192.168.149.129:4445/grid/console

Browser中注冊了WebDriver:1個IE執行個體,5個Firefox執行個體,5個Chrome執行個體

七.Python+Selenium自動化測試系列: Selenium Grid

拓展:同樣的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()