selenium做爲一個出色的web automation框架,被愈來愈多的企業採用究其緣由,框架設計的比較remarkable,javascript
做爲一個開源的框架,可以開闢出一套協議,以致於針對app測試的appium採起相同的strategy。使用的是webdriver protocol的擴展版。html
爲何說這個框架設計的比較好?究竟好在哪裏?java
先從表面上看:python
以上,均是不可多得的設計,那麼問題又來了,爲何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來
實現與瀏覽器交互