大數據

Webdriver+Selenium工作原理

舉例說明:
乘客:他/她告訴出租車司機去哪裡,大概怎麼走
出租車司機:他按照乘客的要求來操控出租車
出租車:出租車按照司機的操控完成真正的行駛,把乘客送到目的地
實際應用:
工程師寫的自動化測試代碼:自動化測試代碼發送請求給瀏覽器的驅動(比如火狐驅動、谷歌驅動)
瀏覽器的驅動:它來解析這些自動化測試的代碼,解析後把它們發送給瀏覽器
瀏覽器:執行瀏覽器驅動發來的指令,並最終完成工程師想要的操作。

  1. 工程師寫的自動化測試代碼就相當於是乘客
  2. 瀏覽器的驅動就相當於是出租車司機
  3. 瀏覽器就相當於是出租車
    那在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語言的腳本了。

Leave a Reply

Your email address will not be published. Required fields are marked *