selenium Remote Server 實現原理


selenium作為一個出色的web automation框架,被越來越多的企業采用究其原因,框架設計的比較remarkable,

作為一個開源的框架,能夠開辟出一套協議,以至於針對app測試的appium采取相同的strategy。使用的是webdriver protocol的擴展版。

為什么說這個框架設計的比較好?究竟好在哪里?

先從表面上看:

  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支持那么多語言,怎么實現的?

我想,我給出的答案是協議,selenium remote server/webdriver/appium等完全遵循webdriver json protocol

通過json協議實現跨語言跨平台。如果想了解更多webdriver的Json協議,請參考http://www.w3.org/TR/webdriver/

如果你也要使用restful 自己測試一下下載使用restclient-ui-3.5-jar-with-dependencies.jar

讓我們來驗證這一點,首先你需要一個restful client 和一個chromew ebdriver,selenium-server-standalone-2.48.0.jar

在cmd起remote server

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來

實現與瀏覽器交互

 


免責聲明!

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



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