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通訊,從而操作瀏覽器
安裝與配置
安裝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"}} |