之前用python的第三方庫selenium,搭配unittes,HTMLTestRunner,jenkins來進行自動化測試,大概的流程就是找元素,操作元素,獲取結果進行比較,其中有很多api可以使用,但是它的工作原理是怎么樣的呢?先來看一張圖

客戶端:就是我們的各種語言,python,java,用來發起請求的
webdriver協議:實質上就是一種http協議,但是它基於一種嚴格的json協議JSON Wire protocol
瀏覽器驅動:各種瀏覽器都有對應的驅動,比如谷歌的chromedriver.exe、火狐的geckodriver.exe、IE的IEDriverServer.exe
過程如下:
1.運行用python寫好的selenium腳本,它會像web service中發送一個http請求
2.瀏覽器驅動中的web service 會根據這個請求生成對應的js腳本,因為不同的瀏覽器,相同的操作生成的js腳本會有所不同,因此不同的瀏覽器要有不同的驅動
3.js腳本驅動瀏覽器,產生各種操作,並返回給web service
4.web service將結果通過http響應的形式返回給客戶端
必須指出的是:
1.在WebDriver中為了給用戶以更明確的反饋信息,提供了更細化的http響應狀態碼,比如:
7: NoSuchElement
11:ElementNotVisible
200:Everything OK
2.返回值類似於{ "sessionid":123, "status" : 0, "value" : {"element" : "123422"}},這可能是一個查找元素的返回(get_element_by_id),因為帶有sessionid,因此grid可以實現分布式,操作多個瀏覽器
3.只要語言實現了webdriver協議就可以,所以同一個瀏覽器的驅動就即可以處理Java語言的腳本,也可以處理Python語言的腳本了。
其實這個和之前說的appium的原理一樣,都是用到了webdriver協議來發送請求,獲取響應,也和語言無關,但是不同的是appium service會生成bootstrap.js/bootstrap.jar,並將其注入到device中來驅動其中的uiautomator/uiautomation,以此來達到驅動device的目的,而selenium則使用js來驅動。
