使用 Docker 快速建立 Selenium Grid

如果有使用過 Selenium ,一開始會覺得他很帥,不用人類干預,網頁就會依照撰寫好的程式自動操作網頁瀏覽器。但久而久之就會覺得很礙眼,不想要讓他在自己的電腦上執行,幸好 Selenium 可以利用 RemoteWebDriver 達成遠端測試,實現我們想要的功能。

那什麼是 Selenium Grid?Selenium Grid 就是負責管理所有遠端瀏覽器的,只要告訴 Selenium Grid 你要用什麼瀏覽器測試,Selenium Grid 就會把測試任務分配給它所管理的、可用的瀏覽器做測試,這樣就不用手動一一對應每個遠端瀏覽器,如果開啟並行測試,還可以同時開始測試,大大減少時間。既然要開始遠端測試,那我們就一次弄到好,不要一個遠端瀏覽器,給我來一群!

在 Github 上的 SeleniumHQ/docker-selenium 專案已經幫我們寫好 Dockerfile,要使用非常的簡單,我們這次挑戰難一點的,動態 Selenium Grid,有測試時就會自動啟動容器執行,完成後自動釋放,不會浪費系統資源!

首先先下載 Github 上的 docker-compose-v3-dynamic-grid.ymlNodeDocker/config.toml檔案,放置的方式如下
    
~/
|-- docker-compose-v3-dynamic-grid.yml
`-- NodeDocker/
    `-- config.toml
    

測試時我們先在前景執行 docker compose,因為這樣可以馬上看到 log,方便儲存:
    
docker-compose -f docker-compose-v3-dynamic-grid.yml up
    
註:docker-compose-v3-dynamic-grid.yml 就是檔案名稱,如果有更改檔名請記得替換,且需要在 yaml 檔案的同層目錄執行

此時連線到 127.0.0.1:4444 就可以看到了 Selenium Grid

請注意,雖然上面 URI 顯示為 127.18.0.3:5555,但那是 docker 內的 ip,在 Selenium 程式裡面還是要寫連進去的 ip,以筆者的環境為例就是 192.168.159.128:4444

跑程式執行測試時 Sessions 有出現 1 個

查看 docker 也可以發現 Selenium Grid 自己建起來一個容器執行測試

可以在 Sessions 頁籤裡面看到詳細的資料,如測試環境、瀏覽器版本等等資訊

點擊旁邊的「攝影機」進去查看目前瀏覽器的測試情況,預設密碼是:secret

看來執行的很順利

剛剛我們為了方便除錯所以在前景執行 Selenium Grid,現在只要按 Ctrl + C 就可以關閉。 我們使用下面的程式碼讓他在背景執行:
    
docker-compose -f docker-compose-v3-dynamic-grid.yml up -d
    

之後如果要停止依然要使用原本的檔案停止,請不要刪除:
    
docker-compose -f docker-compose-v3-dynamic-grid.yml down
    

留言