天天看點

selenium grid2 叢集搭建(采用PC作為node節點)

Grid2官方文檔:https://github.com/SeleniumHQ/selenium/wiki/Grid2

本文采用selenium-server-standalone-3.X.X以上版本搭建,若采用2.53.0及以下版本,請僅作參考

一、環境準備

1、準備兩台計算機(可win、可linux),一台作為hub機,另外作為node機,電腦上均安裝并配置好java環境,建議1.8版本以上。

2、hub機和node機之間的網絡要通暢,可以ping通,可以telnet到hub服務啟動的端口。

2、作為node節點的電腦上安裝好IE、Chrome、Firefox三種浏覽器。具體浏覽器及webdriver版本關系可參考:selenium webdriver 啟動三大浏覽器Firefox,Chrome,IE

3、下載下傳selenium-server-standalone,儲存到兩台計算機中,位置随意。(建議下載下傳3.x.x 以上版本,本文按照此版本進行配置)

下載下傳位址:http://selenium-release.storage.googleapis.com/index.html

二、建立連接配接

1、在hub機上,selenium-server-standalone檔案目錄下,打開cmd視窗,執行語句

①預設執行:C:\>java -jar selenium-server-standalone-3.X.X.jar -role hub

參數的含義,可參考下文:https://blog.csdn.net/xiaomin1991222/article/details/50980117

②修改配置執行:C:\>java -jarselenium-server-standalone-2.37.0.jar -role hub -hubConfig hubconfig.json

hubconfig.json内容:

{

"port": 4444,

"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

}
           

啟動成功後,通路網址 http://localhost:4444/grid/console,驗證網址是否出現“view config”連結,即可判斷hub啟動成功。預設情況下selenium使用4444作為端口。

selenium grid2 叢集搭建(采用PC作為node節點)

2、在node機上執行selenium-server-standalone檔案目錄下,打開cmd視窗,執行語句

①預設執行:java -jar selenium-server-standalone-3.7.1.jar -role node -hub http://192.168.XX.XXX:4444/grid/register (url位址更換為hub機的位址)

參數的含義,可參考下文:https://blog.csdn.net/xiaomin1991222/article/details/50980117

②修改配置執行:java -jar selenium-server-standalone-3.7.1.jar -role node -hub http://192.168.XX.XXX:4444/grid/register -nodeConfig node.json(url位址更換為hub機的位址)

node.json内容:

{

"capabilities":

[

{

"browserName": "firefox",

"marionette": true,

"maxInstances": 3,

"seleniumProtocol": "WebDriver"

},

{

"browserName": "chrome",

"maxInstances": 2,

"seleniumProtocol": "WebDriver"

},

{

"browserName": "internet explorer",

"maxInstances": 1,

"seleniumProtocol": "Selenium"

}

],

"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",

"maxSession": 5,

"port": 5555,

"register": true,

"registerCycle": 5000,

"hub": "http://192.168.42.133:4444",

"nodeStatusCheckTimeout": 5000,

"nodePolling": 5000,

"role": "node",

"unregisterIfStillDownAfter": 60000,

"downPollingLimit": 2,

"debug": false,

"servlets" : [],

"withoutServlets": [],

"custom": {}

}
           

(備注:此為3.X.X以上版本,2.53.0以下版本可參考https://github.com/SeleniumHQ/selenium/blob/selenium-2.53.0/java/server/src/org/openqa/grid/common/defaults/DefaultNode.json)

再次通路網址 http://localhost:4444/grid/console,驗證Node節點是否在Hub注冊成功。

selenium grid2 叢集搭建(采用PC作為node節點)

注意:①、3.X.X官方文檔中"port": -1,,應改為自定義端口号,2.X.X版本預設為5555

②、3.X.X版本中,采用在指令行後面添加-Dwebdriver.XXX.driver的方式已經不能使用,可在執行啟動程式中System.setProperty("webdriver.XXX.driver", "XXXDriver.exe")配置

③、安裝浏覽器時候,盡量選擇預設安裝位置,3.X.X版本不需要配置浏覽器位置,若改變安裝位置,不知是否有影響

三、執行腳本

注意:①、使用node節點遠端執行時,需在node機上安裝各浏覽器的XXXdriver,需配置在環境變量path下可執行檔案夾中(如:XXXdriver下載下傳到D:\selenium中,将蓋位址配置到環境變量path中),且名稱不能改變,必須為chromedriver、geckodriver、IEDriverServer等;②、本機執行時,需先聲明浏覽器路徑、XXXdriver路徑。

以IE為例:

1、建立RemoteDriverUtil:

import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

public class RemoteDriverUtil {
	static WebDriver driver;

	static String nodeUrl = "http://192.168.42.90:5555/wd/hub";

	// 啟用遠端調用ie浏覽器
	public static WebDriver createRemoteIEDriver() {
		// 指定調用IE進行測試
		DesiredCapabilities capability = DesiredCapabilities.internetExplorer();
		// 避免IE安全設定裡,各個域的安全級别不一緻導緻的錯誤
		capability.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
		// 連接配接到selenium hub,遠端啟動浏覽器
		capability.setPlatform(Platform.WINDOWS);
		try {
			driver = new RemoteWebDriver(new URL(nodeUrl), capability);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return driver;
	}

	// 啟用遠端調用chrome
	public static WebDriver createRemoteChromeDriver() {
		DesiredCapabilities capability = DesiredCapabilities.chrome();
		capability.setBrowserName("chrome");
		capability.setVersion("67");
		capability.setPlatform(Platform.WINDOWS);
		try {
			driver = new RemoteWebDriver(new URL(nodeUrl), capability);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return driver;
	}

	// 啟用遠端調用firefox
	public static WebDriver createRemoteFirefoxDriver() {
		DesiredCapabilities capability = DesiredCapabilities.firefox();
		capability.setBrowserName("firefox");
		capability.setVersion("");
		capability.setPlatform(Platform.WINDOWS);
		try {
			driver = new RemoteWebDriver(new URL(nodeUrl), capability);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return driver;
	}
}
           

2、建立IETest,并執行

System.out.println("start selenium IE");
		//代碼關閉IE一些配置
		DesiredCapabilities dc = DesiredCapabilities.internetExplorer();
		dc.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
		dc.setCapability("ignoreProtectedModeSettings", true);
		// 初始化firefox浏覽器執行個體
		WebDriver driver = RemoteDriverUtil.createRemoteIEDriver();
		// 最大化視窗
		driver.manage().window().maximize();
		// 設定隐性等待時間
		driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
		// 打開一個站點
		driver.get("http://www.baidu.com/");
		// 擷取目前頁面的标題
		System.out.println("目前打開頁面的标題是:" + driver.getTitle());
		// 關閉浏覽器
		driver.close();
		System.out.println("end selenium IE");
           

繼續閱讀