selenium作為一個出色的web automation框架,被越來越多的企業采用究其原因,框架設計的比較remarkable,
作為一個開源的框架,能夠開辟出一套協議,以至於針對app測試的appium采取相同的strategy。使用的是webdriver protocol的擴展版。
為什么說這個框架設計的比較好?究竟好在哪里?
先從表面上看:
- selenium automation framework 支持多語言,java、python、c#、JavaScript、Perl、ruby ...... 測試工具中,能支持這么多語言還不牛逼么 ?QTP/UFT才只支持vbs
- 跨平台支持windows/linux/Mac OS
- 支持grid
- 擁有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來
實現與瀏覽器交互

