SeleniumHQ官方項目:https://github.com/seleniumHQ/docker-selenium 項目目前快速迭代中。html
這裏主要針對的是 Selenium Grid,它用於分佈式自動化測試,就是一套Selenium 代碼可在不一樣的環境上運行。恰好,Docker可快速的建立各類環境。node
Selenium Grid 有兩個概念python
hub :主節點,你能夠看做 「北京總公司的測試經理」。git
node:分支節點,你能夠看做 「北京總公司的測試小兵A」 和 「上海分公司的測試小兵B」,還有 「深圳分公司的測試小兵C」 …。github
也就是說在Selenium Grid中只能有一個主hub,但能夠在本地或遠程創建 N 多個分支node,測試腳本指向主hub,由主hub 分配給本地/遠程node 運行測試用例。web
以Ubuntu爲例,在Ubuntu下安裝Docker,請參考:Docker安裝(Ubuntu)chrome
docker hub(倉庫):docker
https://hub.docker.com/r/selenium/hub/ubuntu
一、下載主hub鏡像(北京總公司的測試經理)瀏覽器
$ sudo docker pull selenium/hub
二、下載主node chrome 鏡像(上海分公司的測試小兵B)
$ sudo docker pull selenium/node-chrome
三、查看鏡像
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
selenium/node-chrome latest 1eba57bd3d79 12 days ago 823MB selenium/hub latest d1437f7d9f87 12 days ago 285MB
四、啓動主hub容器
$ sudo docker run -d -P --name selenium-hub selenium/hub
五、啓動分支node chrome 容器
$ sudo docker run -d --link selenium-hub:hub selenium/node-chrome
selenium-hub
容器,併爲其設置了別名hub
六、查看容器
$ sudo docker images
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cd0dac69875 selenium/hub "/opt/bin/entry_poin…" 12 hours ago Up 12 hours 0.0.0.0:32768->4444/tcp selenium-hub 18d139a6c36d selenium/node-chrome "/opt/bin/entry_poin…" 12 hours ago Up 12 hours eloquent_gates
這裏須要注意,Selenium/hub 容器的端口號爲 4444
,對Ubuntu映射的端口爲 32768
,前面經過 -P
參數自動分配。
工做原理:
selenium Grid腳本 -> ubuntu(32768) -> Hub容器(4444) -> Node Chrome 容器
一、編寫Selenium Grid 腳本(grid_demo.py)
from selenium import webdriver from time import sleep driver = webdriver.Remote( command_executor='http://127.0.0.1:32768/wd/hub', desired_capabilities={'browserName': 'chrome'} ) driver.get('https://www.baidu.com') print("get baidu") driver.find_element_by_id("kw").send_keys("docker selenium") driver.find_element_by_id("su").click() sleep(1) driver.get_screenshot_as_file("/home/fnngj/mypro/baidu_img.png") driver.quit() print("end...")
注意訪問的端口號和瀏覽器,由於咱們只啓動了node chrome容器,若是這裏設置Friefox的話,須要你啓動 node firefox
容器,hub找不到合適的node會報錯。
另外,咱們爲了驗證腳本是否真的執行加上了打印和截圖。
二、運行腳本
$ python3 grid_demo.py
get baidu
end...
三、查看截圖
百度頁面是被渲染出來了,但中文有亂碼。
https://www.cnblogs.com/zhuochong/p/10062735.html
http://10.81.65.163:32773/grid/console
https://blog.csdn.net/yushupan/article/details/78404075
sudo docker run -d -p 4444:4444 --name selenium-hub selenium/hubdocker run -d -p 5901:5900 --name node58 --linkselehub:hub