selenium Remote Server 實現原理

selenium做爲一個出色的web automation框架,被愈來愈多的企業採用究其緣由,框架設計的比較remarkable,javascript

做爲一個開源的框架,可以開闢出一套協議,以致於針對app測試的appium採起相同的strategy。使用的是webdriver protocol的擴展版。html

爲何說這個框架設計的比較好?究竟好在哪裏?java

先從表面上看:python

  1. selenium automation framework 支持多語言,java、python、c#、JavaScript、Perl、ruby ...... 測試工具中,能支持這麼多語言還不牛逼麼 ?QTP/UFT才只支持vbs
  2. 跨平臺支持windows/linux/Mac OS
  3. 支持grid
  4. 擁有page object model和page factory

以上,均是不可多得的設計,那麼問題又來了,爲何selenium支持那麼多語言,怎麼實現的?linux

我想,我給出的答案是協議,selenium remote server/webdriver/appium等徹底遵循webdriver json protocolweb

經過json協議實現跨語言跨平臺。若是想了解更多webdriver的Json協議,請參考http://www.w3.org/TR/webdriver/chrome

若是你也要使用restful 本身測試一下下載使用restclient-ui-3.5-jar-with-dependencies.jarjson

讓咱們來驗證這一點,首先你須要一個restful client 和一個chromew ebdriver,selenium-server-standalone-2.48.0.jarc#

在cmd起remote serverwindows

java -Dwebdriver.chrome.driver="chromedriver.exe"  -jar selenium-server-standalone-2.48.0.jar 

啓動成功,接下來打開瀏覽器:打開http://localhost:4444/wd/hub/static/resource/hub.html

1.建立session

2.打開百度

3.建立截圖

那麼這個過程是在怎麼實現呢?

看webdriver 的protocol

第一步建立session:Post  http://127.0.0.1:4444/wd/hub/session

若是不想使用默認的,能夠經過post desiredCapabilities

這樣設置body

{ "desiredCapabilities": {
      "browserName": "chrome",
      "javascriptEnabled": true,
      "platform": "ANY",
      "version": "55"
   }
}

 

可以使用上面的辦法,拿到session ID

第二步:打開百度

發送Post  http://localhost:4444/wd/hub/session/85a32b0f-e617-449a-bcea-8c84ffa2c5f4/url

 Body:

{
"url":"http://www.baidu.com"
}

第三步:findElement By id

發送Post http://localhost:4444/wd/hub/session/85a32b0f-e617-449a-bcea-8c84ffa2c5f4/element

{
    "using": "id",
    "value": "kw"
}

也可使用xpath

{
    "using": "xpath",
    "value": "//input[@id='kw']"
}

 

 第三步:輸入selenium 從上一步獲取element ID爲1

發送 Post http://localhost:4444/wd/hub/session/935821aa-6074-4fc9-bd26-eedf483d6c9d/element/1/value

Body

{
    "value": [
        "selenium"
    ]
}

 

 

總結:

 

selenium remote sever 其實就是經過webdriver Json與瀏覽器交互,這也就介紹了爲何selenium可以實現支持各類語言,

無論是java python 等,都是經過selenium API翻譯成Json 與瀏覽器進行交互。掌握了webdriver protocol 能夠經過本身直接寫request來

實現與瀏覽器交互

相關文章
相關標籤/搜索