舉例說明:
乘客:他/她告訴計程車司機去哪裡,大概怎麼走
計程車司機:他按照乘客的要求來操控計程車
計程車:計程車按照司機的操控完成真正的行駛,把乘客送到目的地
實際應用:
工程師寫的自動化測試代碼:自動化測試代碼發送請求給浏覽器的驅動(比如火狐驅動、谷歌驅動)
浏覽器的驅動:它來解析這些自動化測試的代碼,解析後把它們發送給浏覽器
浏覽器:執行浏覽器驅動發來的指令,并最終完成工程師想要的操作。
- 工程師寫的自動化測試代碼就相當于是乘客
- 浏覽器的驅動就相當于是計程車司機
-
浏覽器就相當于是計程車
那在WebDriver腳本運作的時候,它們之間是如何通信的呢?為什麼同一個browser driver即可以處理java語言的腳本,也可以處理python語言的腳本呢?讓我們來看一下,一條Selenium腳本執行時後端都發生了哪些事情:
1.對于每一條Selenium腳本,一個http請求會被建立并且發送給浏覽器的驅動
2.浏覽器驅動中包含了一個HTTP Server,用來接收這些http請求
3.HTTP Server接收到請求後根據請求來具體操控對應的浏覽器
4.浏覽器執行具體的測試步驟
5.浏覽器将步驟執行結果傳回給HTTP Server
6.HTTP Server又将結果傳回給Selenium的腳本,如果是錯誤的http代碼我們就會在控制台看到對應的報錯資訊。
為什麼使用HTTP協定呢?
因為HTTP協定是一個浏覽器和Web伺服器之間通信的标準協定,而幾乎每一種程式設計語言都提供了豐富的http libraries,
這樣就可以友善的處理用戶端Client和伺服器Server之間的請求request及響應response,WebDriver的結構中就是典
型的C/S結構,WebDriver API相當于是用戶端,而小小的浏覽器驅動才是伺服器端。
那為什麼同一個浏覽器驅動即可以處理Java語言的腳本,也可以處理Python語言的腳本呢?
這就要提到WebDriver基于的協定:JSON Wire protocol。
JSON Wire protocol是在http協定基礎上,對http請求及響應的body部分的資料的進一步規範。
我們知道在HTTP請求及響應中常常包括以下幾個部分:http請求方法、http請求及響應内容body、http響應狀态碼
等。
是以在Client和Server之間,隻要是基于JSON Wire Protocol來傳遞資料,就與具體的腳本語言無關了,這樣同一個
浏覽器的驅動就即可以處理Java語言的腳本,也可以處理Python語言的腳本了。