一、selenium grid的組成與作用:由一個集線器hub和多個客戶機node組成,如果你的程序需要在不用的瀏覽器,不同的操作系統上測試,而且比較多的case需要多線程遠程執行,那么一個比較好的測試方案就是使用 selenium grid,hub用來管理各個代理節點的注冊和狀態信息,並且接受遠程客戶端代碼的請求調用,然后把請求的命令再轉發給代理節點來執行。
其結構組成:
二、准備工作:hub集線器上安裝jdk,selenium-server-standalone-xxx.jar,准備好各瀏覽器的驅動(主要是chromedriver和iedriver)
node節點上也需要安裝jdk,selenium-server-standalone-xxx.jar,准備好各瀏覽器的驅動(主要是chromedriver和iedriver)
三、啟動hub節點(在你使用的hub集線器機器上執行命令):java -jar selenium-server-standalone-2.53.0.jar -role hub (hub啟動命令可做成bat文件,方便維護與使用)
其默認監聽端口4444,默認IP是localhost 如果要修改,只需要加-port 參數和-Hubhost
例如:java -jar selenium-server-standalone-2.53.0.jar -role hub -port 1234 -Hubhost 192.168.1.30
四、啟動node節點(在你使用的node節點機器上執行命令,也可以在hub集線器機器上執行,即把hub集線器當成node節點):java -jar selenium-server-standalone-2.53.0.jar -role node -hub http://hub集線器的ip:4444/grid/register -Dwebdriver.chrome.driver=chromedriver.exe -browser browserName=chrome(這里指定了要啟動的瀏覽器和對應的瀏覽器驅動,node啟動命令可做成bat文件,方便維護與使用)
其默認監聽端口5555,如果要修改,只需要加-port 參數
例如:java -jar selenium-server-standalone-2.53.0.jar -role node -port 6666 -hub http://hub集線器的ip:4444/grid/register -Dwebdriver.chrome.driver=chromedriver.exe -browser browserName=chrome(這里指定了要啟動的瀏覽器和對應的瀏覽器驅動)
node節點的啟動參數也可以做成json文件,json文件內容如下(文件名隨意取,我這里的文件名為:node.json):
{ "capabilities":[{ "browserName": "chrome", "maxInstances": 6, "platform": "WINDOWS", "version":"52.0.2743.82 m","webdriver.chrome.driver":"chromedriver.exe" }], "configuration": { "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "maxSession": 5, "port": 5555, "register": true, "registerCycle": 5000, "hub": "http://192.168.1.36:4444" } }
執行配置文件node.json:java -jar selenium-server-standalone-2.53.0.jar -role node -hub http://hub集線器的ip:4444/grid/register -nodeConfig node.json,這個跟直接使用命令行是同樣的效果,隨個人喜好
現在hub集線器和node節點都已經啟動完畢了,意味着hub集線器已經完全控制了node節點,開始編寫腳本
public void setUpDriver() throws MalformedURLException{
ChromeOptions options = new ChromeOptions();
//加載chrome瀏覽器的配置文件,比如插件,下載設置等,個人建議先在瀏覽器中設置好,不要把瀏覽器的一些參數寫在腳本里
options.addArguments("user-data-dir=C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data");
//啟動chrome瀏覽器
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
//將配置文件加載到chrome瀏覽器中
capabilities.setCapability(ChromeOptions.CAPABILITY,options);
//capabilities.setCapability("chromeOptions", options);
//啟動遠程的node節點,注意:URL地址一定要寫你的node節點的地址,端口號為你指定的端口號,若沒有修改,則就是默認的5555,若修改了,就用你自己修改過后的端口號
driver = new RemoteWebDriver(new URL("http://node節點的ip:5555/wd/hub"), capabilities);
//打開百度主頁
driver.get("http://www.baidu.com");
}