Selenium-Grid2 配置RemoteWebDriver


為什么要使用Selenium Grid ?

  • 分布式運行大規模的Test
  • 能夠通過一個中央點,很容易的運行不同OS上的不同browser
  • 最小化對Grid的維護時間,並能充分利用虛擬設備

Selenium Grid 部署與啟動

Hub :總控節點,連接調用Node。 
Node: 負責執行Tests,調用瀏覽器。

下面以selenium-server-standalone-2.27.0.jar版本為例: 
使用這樣3台機器:

  • 10.81.14.170
  • 10.81.14.180
  • 10.81.14.190

啟動Hub(10.81.14.180):

java  -jar  selenium-server-standalone-2.27.0.jar -role hub 

在瀏覽器內打開:http://10.81.14.180:4444/grid/console可以查看Hub狀態。也就是說Grid默認啟動端口是4444,如果想切換為其他端口,則加-port參數。比如要切換為8888:

java  -jar  selenium-server-standalone-2.27.0.jar -role hub  -port 8888

啟動Node(10.81.14.170):

java -jar selenium-server-standalone-2.27.0.jar -role node -hub http://10.81.14.180:8888/grid/register

同樣的,也可以使用-port切換node端口,默認端口是5555. 
此處的node節點,也可以作為一個單機的遠程節點存在,並同時支持RC,WebDriver。瀏覽器輸入http://10.81.14.180:8877/wd/hub可以看到session信息。

然后,同樣的啟動10.81.14.180、10.81.14.190上的Node節點。

打開瀏覽器http://10.81.14.180:8888/grid/console,可以看到如下的界面:

至此,Selenium Grid2已經配置成功了。

使用Grid運行Tests

Selenium Grid2是向后兼容的,同時支持RC,WebDriver。如果使用RC,即Selenium1,使用以下的方法:

Selenium selenium = new DefaultSelenium(“10.81.14.180”, 8888, “*firefox”, “http://www.baidu.com”);

使用WebDriver的話,使用以下的方法:

DesiredCapabilities capability = DesiredCapabilities.firefox();
WebDriver driver = new RemoteWebDriver(new URL("http://10.81.14.180:8888/wd/hub"), capability);

可以看出所有的請求都發給了Hub,然后由Hub分配給匹配的節點來執行。 
那么,Hub是如何來分配的呢?往下看

Node配置

默認,Node會啟動11個瀏覽器實例:5 Firefox,5 Chrome, 1 Internet Explorer. 從Grid Console界面看出來,為什么每個機器上有22個實例呢?是這樣的,Node為了同時支持RC與WebDriver兩種協議,所以就是2*11了。把鼠標放到各個瀏覽器圖標上,就可以看出里面的配置區別了。
內容類似:

{
      "browserName": "*firefox",
      "maxInstances": 5,
      "seleniumProtocol": "Selenium"
    }

或者

 {
      "browserName": "firefox",
      "maxInstances": 5,
      "seleniumProtocol": "WebDriver"
    }

其中,seleniumProtocol就是定義的不同協議了。

如何修改Driver配置呢?可以從啟動參數里操作。

-browser browserName=firefox,version=3.6,maxInstances=5,platform=LINUX

那Node默認啟動的配置是什么呢? 
由於如果從啟動參數里,配置這個多東西,很難寫的。因此,官方很人性化的提供了JSON文件來配置。也就是說默認啟動的配置如下: 
http://code.google.com/p/selenium/source/browse/trunk/java/server/src/org/openqa/grid/common/defaults/DefaultNode.json

http://code.google.com/p/selenium/source/browse/trunk/java/server/src/org/openqa/grid/common/defaults/DefaultHub.json

如果想自定義配置,直接對json文件修改,啟動時,指定配置文件就可以了。

java -jar selenium-server-standalone.jar -role hub -hubConfig hubconfig.json 

僅僅就這樣就行了?從博文http://www.shenyanchao.cn/blog/2012/10/12/selenium-multiple-browser-support/知道,瀏覽器的啟動是要制定一些driver位置的,否則Node不知道怎么啟動瀏覽器實例。因此需要進行指定:

java -jar selenium-server-standalone-2.27.0.jar -port 8877 -role node -hub http://10.81.14.180:8888/grid/register  -nodeConfig nodeconfig.json -Dwebdriver.chrome.driver="E:/selenium/chromedriver.exe" -Dwebdriver.ie.driver="E:/selenium/IEDriverServer.exe"

參考文檔:
http://code.google.com/p/selenium/wiki/Grid2

客戶端書寫測試用例


package seleniumdemo; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; public class EDemo2 { public static void main(String[] args) throws MalformedURLException, InterruptedException { // RemoteWebDriver的基本使用 //第一個參數:表示服務器的地址。第二個參數:表示預期的執行對象,其他的瀏覽器都可以以此類推 WebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:4444/wd/hub/"), DesiredCapabilities.chrome()); driver.manage().window().maximize(); driver.get("http://www.baidu.com"); Thread.sleep(2000); JavascriptExecutor js = (JavascriptExecutor)driver; js.executeScript("alert('我現在在服務器')"); Thread.sleep(2000); driver.quit(); } }

 

執行腳本

其實腳本是在服務器端執行的,客戶端用於發送命令。執行過程中可以看到服務器端的chrome別調用,同時cmd打印出相關的運行信息,如下 
這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM