在本地起docker容器,運行selenium的時候踩了一些坑,先簡單記錄,后續梳理后再完善:
一、構建運行環境-容器
1、先起selenium運行的Chrome容器:
docker run -d -p 4444:4444 -p 5900:5900 --shm-size 2g selenium/standalone-chrome-debug:3.141.59-20200525
參數簡析:
4444的端口映射是遠端Chrome的地址,在代碼中觸發driver的運行部分為:
selenium_grid_url = "http://docker_chromeIP:4444/wd/hub" # docker_chromeIP是selenium-chrome-debug容器運行的IP,需要用inspect去查看確認。 driver = webdriver.Remote(command_executor=selenium_grid_url, desired_capabilities=caps)
1.1、5900端口映射是虛擬Chrome界面的啟動端口號,這個是standalone-chrome-debug特有的;
1.2、在Mac端的啟動方法是在finder中打開server鏈接,然后鏈接vnc://localhost:5900 密碼默認為secret,就可以看到遠端Chrome運行時候的情況了。
注意,這里需要用localhost,而不是容器里面的IP,因為在起容器的時候,映射的IP是到主機的,然后起模擬Chrome的操作也是在本機進行的,這樣才能ping通。
1.3、--shm-size 2g 這個的設置是Chrome-driver8.0版本以上,因為緩存不足會報錯導致的,填上這個參數就不會了,解決方法是Google來的,忘記具體的報錯信息了,所以說應該隨時順手記下來了的。。。
注意,還有一個鏡像是standalone-chrome,這個與上面debug的區別就是沒有虛擬的Chrome界面展示,在運行的時候,發現用standalone-chrome鏡像的話,對界面截圖就會失敗,為timeout,替換為debug版本就可以了。
2.1、再起pytest容器:
docker run -d -v `pwd`:/data -t xharbor.i-tetris.com:5000/public/pytest:v1.0 cat
注意這個容器起的時候,需要在本機定位到腳本運行的根目錄,因為'pwd'嘛。
二、運行腳本——在docker中運行selenium腳本:
進入selenium容器中,在data目錄下執行pytest即可。