1. 程式人生 > >nightwatch + selenium 瀏覽器自動化測試 教程(一)

nightwatch + selenium 瀏覽器自動化測試 教程(一)

什麼是nightwatch

Nightwatch.js 是一個用於web網站或應用的自動化測試框架,使用node.js和W3C WebDriver API (熟知的selenium)

它是一個完整的瀏覽器自動化測試解決方案,能夠簡化持續整合及自動化測試編寫工作。當然它也可以用於nodejs的單元測試過程中。

webdriver 簡介

webdriver是一個瀏覽器自動化的標準庫, 它是selenium(最開始是為java設計,現在基本上已經支援大部分語言了)解決方案中的一部分。

Nightwatch使用webdriver作為瀏覽器任務相關的task,例如開啟瀏覽器例項,保持連線。

webdriver現在已經成為W3C標準, 用於標準化瀏覽器自動化的實現。

nightwatch的實現原理

nightwatch 通過restful http api與 selenium server通訊,從而操作瀏覽器

Theory of Operation

安裝與配置

安裝nodejs

首先當然需要安裝node.js,安裝教程請參考,這裡就不詳述了

安裝nightwatch

npm install -g nightwatch

其中-g引數表示全域性安裝

Selenium Server Setup

selenium server是webdriver的一個標準化實現,也是最常用的,它允許你通過配置在一個地方同時操作多個不同型別的瀏覽器,而且可以跟瀏覽器保持分離,在不同伺服器或者電腦上,使用rest http進行通訊操作。

Selenium Server

selenium server是一個java應用,nightwatch使用它和多瀏覽器進行通訊。所以你首先需要安裝jdk, 不能低於1.7

下載 Selenium

現在最新版本的 selenium-server-standalone-{VERSION}.jar, 下載地址 Selenium downloads 

啟動Selenium

$ java -jar selenium-server-standalone-{VERSION}.jar

配置nightwatch + selenium

首先建立一個node.js工程, 建立一個目錄名為myproject, 然後進入目錄,在終端上執行npm init -y, 生成一個配置檔案package.json。

nigthwatch test runner 需要配置一個名為nigthwatch.json的配置檔案, 或者nightwatch.conf.js(優先會載入nightwatch.conf.js,沒有的話就載入nightwatch.json), 配置檔案示例如下

{
  "src_folders" : ["tests"],
  "output_folder" : "reports",
  "custom_commands_path" : "",
  "custom_assertions_path" : "",
  "page_objects_path" : "",
  "globals_path" : "",

  "selenium" : {
    "start_process" : false,
    "server_path" : "",
    "log_path" : "",
    "port" : 4444,
    "cli_args" : {
      "webdriver.chrome.driver" : "",
      "webdriver.gecko.driver" : "",
      "webdriver.edge.driver" : ""
    }
  },

  "test_settings" : {
    "default" : {
      "launch_url" : "http://localhost",
      "selenium_port"  : 4444,
      "selenium_host"  : "localhost",
      "silent": true,
      "screenshots" : {
        "enabled" : false,
        "path" : ""
      },
      "desiredCapabilities": {
        "browserName": "firefox",
        "marionette": true
      }
    },

    "chrome" : {
      "desiredCapabilities": {
        "browserName": "chrome"
      }
    },

    "edge" : {
      "desiredCapabilities": {
        "browserName": "MicrosoftEdge"
      }
    }
  }
}

基礎配置參照下表

Name type

default

description
src_folders string|array none 測試指令碼程式碼放置的目錄
output_folder Optional string tests_output JUnit XML report files 儲存的位置
custom_commands_path Optional string|array none commands 模組的位置目錄
custom_assertions_path Optional string|array none assertions 模組的位置目錄
page_objects_path Optional string|array none page object files 的位置目錄
globals_path Optional string none Location of an external globals module which will be loaded and made available to the test as a property globals on the main client instance.  Globals can also be defined/overwritten inside a test_settings environment.
selenium Optional object Selenium Server 相關的配置檔案
test_settings object test 配置模組檔案
live_output Optional boolean false

併發執行情況下是否快取測試結果

disable_colors Optional boolean false

控制檯輸出顏色開關

parallel_process_delay Optional integer 10

Specifies the delay(in milliseconds) between starting the child processes when running in parallel mode.

test_workers Optional boolean|object false Whether or not to run individual test files in parallel. If set to true, runs the tests in parallel and determines the number of workers automatically.  If set to an object, can specify specify the number of workers as "auto" or a number.  Example: "test_workers" : {"enabled" : true, "workers" : "auto"}
test_runner Optionalsince v0.8.0 string|object "default" Specifies which test runner to use when running the tests. Values can be either default (built in nightwatch runner) or mocha. Example: "test_runner" : {"type" : "mocha", "options" : {"ui" : "tdd"}}