在 Docker 跑 Nightwatch.js + Selenium Server (xvfb)

2018-07-02 Nightwatch.js

前陣子在寫 2018 iT 邦幫忙鐵人賽「Ops 的轉職之路 – Puppet 從入門就放棄」的時候看到了許多好文章,其中一個是「Nightwatch101:使用 Nightwatch 實現 End-to-End Testing 」講的是怎麼用 Nightwatch.js 做 e2e 測試,那時候就很想來玩一下自動化測試,直到最近工作有許多大型作業都要花費很多時間進行人工驗證,所以乾脆自己來練習一下怎麼寫自動化測試 …

 

但是這篇沒有要說怎麼寫 Nightwatch (雖然有一些些心得可以分享),而是要講怎麼在 Docker 跑 Nightwatch 測試 …

 

記得在更早之前有人問過我怎麼在 Travis CI 上跑 Nightwatch,當時沒有給一個很完整的答案,這次在這篇一起解答!

 

由於跑 Selenium 會需要啟動 Browser Driver,也需要圖形化功能,所以一般在 Container 都會跑不起來

大概會像這樣的錯誤訊息:

$ npm start

Starting selenium server… started – PID: 4041

[Test] Test Suite
=====================

Error retrieving a new session from the selenium server

Connection refused! Is selenium server started?

 

發現 selenium server 起不來 …

 

這時候就可以使用 xvfb 來模擬 Virtual Window 並且不需要把圖像輸出到螢幕,只跑在背景

 

說在前面,這篇的解法是參考「Connection Refused Is Selenium Server Started? unknown error #1529

 

安裝 xvfb 和 Browser driver

$ export CHROME_BIN=/usr/bin/google-chrome
$ export DISPLAY=:99.0
$ sh -e /etc/init.d/xvfb start
$ sudo apt update && apt install \
    xorg xvfb libappindicator1 fonts-liberation -y
$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo dpkg -i google-chrome*.deb

為了不要在主螢幕輸出,所以把圖像輸出到 99 這個螢幕上,因為根本不會用到 99 …

 

然後拿到 Travis CI 上跑一樣的指令丟到 before_install 內先跑

before_install:
  - export CHROME_BIN=/usr/bin/google-chrome
  - export DISPLAY=:99.0
  - sh -e /etc/init.d/xvfb start
  - sudo apt-get update
  - sudo apt-get install -y libappindicator1 fonts-liberation
  - wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  - sudo dpkg -i google-chrome*.deb

 

如果是 Circle CI 也可以如法炮製!

 

 

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱