沒有GUI的網頁測試


Selenium可以愉快地進行一些網頁的測試,甚至可以做一些爬蟲工具 當然在Mac/Window上安裝chrome,再運行selenium就可以進行以上的自動化進程 但若果要在沒有圖像化顯示的服務器上邊跑就需要進行一些設定了 以下是在docker上面跑nodejs + selenium + chromedriver的例子


# 映像檔選alpine的話需要安裝一大堆的東西 ..
FROM node:8.11

# 安裝一些會用到的lib
RUN apt-get update && \
    apt-get install -y unzip libnss3 openssl apt-transport-https

# Install ChromeDriver
RUN wget -N http://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip && \
    unzip chromedriver_linux64.zip && \
    mv -f chromedriver /usr/local/bin/chromedriver


# 安裝能在linux上跑的chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux\_signing\_key.pub | apt-key add -  && \
    sh -c 'echo "deb https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' && \
    apt-get update && \
    apt-get install -y google-chrome-stable

在無圖形化的OS上面跑chrome,有兩個方案 比較舊的就是用Xvfd(X virtual framebuffer)來做一個假的顯示介面讓chrome跑走來 另一個就是headless chrome了 chrome在59以後的版本支持headless mode 無頭化的chrome就是為了方便像selenium這類自動化測試工具的開發及應用 Ref: https://developers.google.com/web/updates/2017/04/headless-chrome


直接在code裡面在chromedriver的設定加進headless就可以了

const options = new chromeDriver.Options();
options.addArguments(
    // headless 模式
    'headless',
    // Use --disable-gpu to avoid an error from a missing Mesa library, as per
    // https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
    'disable-gpu',
    'window-size=1024,768',
   // 權限問題, root下沒有no-sandbox貌似chrome不能起動
    'no-sandbox',
);

const driver = await new Builder().forBrowser('chrome').setChromeOptions(options).build();