Travis-CI 上設定 Headless Chrome

image

今天在弄自己的小專案的時候發現現在 travis-ci 要設定 Headless Chrome 已經簡單很多了,這邊紀錄一下。

自從 Chrome 最近開始支援 headless 參數後,以前用 phantomjs 跑測試的地方慢慢地都可以換到 headless chrome,以往在 travis-ci 都要用 xfvb 跑一個 framebuffer 的 display server 現在也不需要了,往後 CI 上跑瀏覽器測試又更容易了。

nightwatch 設定部分

這邊用 vue-cli 產生的 webpack 專案作為例子,當你用 vue init webpack YOUR_PROJECT 時,test 目錄內會有兩個目錄 e2e 與 unit 分別做不同測試項目,其中 e2e 的 nightwatch 設定檔如下: chrome: { desiredCapabilities: { browserName: 'chrome', javascriptEnabled: true, acceptSslCerts: true } },

這時可以用 chromeOptions 加上 --headless 參數: chrome: { desiredCapabilities: { browserName: 'chrome', javascriptEnabled: true, acceptSslCerts: true, **chromeOptions : { args: ['headless', 'disable-gpu', ] }** } },

這時使用 npm run e2e 時 chrome 的視窗就不會跳出來,改用 headless 執行了。

Travis-CI 設定部分

既然 nightwatch 本身已經用 Headless Chrome,travis 的設定就只剩下把 Chrome 安裝上去就好了,以下是範例的 .travis-yml: `dist: trusty sudo: false addons: chrome: stable``language: node_js node_js:

  • "6"`

另外 travis-ci 預設的 Ubuntu 是 12.04 LTS, 加上 trusty 那行可以改用 14.04 LTS,問題會比較少,加上 sudo: false 則是可以開啟 container 模式加快開機速度。

現在的設定真是不可思議的簡單,想到以前還要啟動 xfvb, 指定 DISPLAY 還要在 sleep 個三秒,現在一切都是如此寫意,太爽了~


讀者回函
讀完本文之後有什麼建議或回饋嗎?請按此在 Twitter 上面分享此文並且提及我,或是透過寄送電子郵件分享你的看法 😎