HAT
A platform independent debuggable BDD Javascript testing framework. It's simple, easy to use and not dependant to any other tool or library. It's built with nodeJs, webdriver.io (Next-gen WebDriver for Node.js) and cucumber-js complete with integrated API Testing.
Installation
npm install # To run your test locally, you'll need a local selenium server running, you can install and # launch a selenium standalone server with chrome, firefox and phantomjs drivers via the # following commands in a separate terminal: yarn global add selenium-standalone@latestselenium-standalone install && selenium-standalone start
Usage
# run 'yarn install' in a terminal window from within the project folder node index.js -dt @inciteLogin // locallyoryarn run bslocal chrome/@inciteLogin // via browserstack
Options
-h, --help output usage information-v, --version output the version number-s, --steps <path> path to step definitions. defaults to ./step-definitions-p, --pageObjects <path> path to page objects. defaults to ./page-objects-o, --sharedObjects [paths] path to shared objects - repeatable. defaults to ./shared-objects-b, --browser <path> name of browser to use. defaults to chrome-r, --reports <path> output path to save reports. defaults to ./reports-d, --disableTestReport [optional] disables the test report from opening after test completion-t, --tags <tagName> name of tag to run-c, --context <path> contextual root path
By default tests are run using Google Chrome, to run tests using another browser supply the name of that browser along with the -b
switch. Available options are:
Browser | Example |
---|---|
Chrome | -b chrome |
Firefox | -b firefox |
The following variables are available within the Given()
, When()
and Then()
functions:
Variable | Description |
---|---|
driver |
an instance of web driver (the browser) |
webdriverio |
the raw webdriver module, providing access to static properties/methods |
page |
collection of page objects loaded from disk and keyed by filename |
shared |
collection of shared objects loaded from disk and keyed by filename |
helpers |
a collection of helper methods things webdriver.io does not provide but really should! |
expect |
instance of chai expect to expect('something').to.equal('something') |
assert |
instance of chai assert to assert.isOk('everything', 'everything is ok') |
trace |
handy trace method to log console output with increased visibility |
fs |
exposes fs (file system) for use globally |
dir |
exposes dir for getting an array of files, subdirectories or both |
request |
exposes the request-promise for API testing |
date |
exposes the date method for logs and reports |
log |
exposes the log method for output to files and emailing |
Resemble JS
Visual Regression functionality withVisual regression testing, gives the ability to take and compare whole page screenshots or of specific parts of the application / page under test. If there are Elements in the page that contain dynamic contents (like a clock or something like tip of the day), you can hide this elements before taking the screenshot by passing the selector (or an array of selectors) to the saveScreenshot function.
// ./runtime/imageCompare.js compareImage: async { const verify = ; await verify; await verifyvalue; await verify;} // usage within page-object file: await verify; await helpers;
request-promise
API Testing functionality withGetting data from a JSON REST API
// ./runtime/helpers.js { let endPoint = 'http://endpoint.com'; let options = method: 'GET' url: endPoint json: true simple: false resolveWithFullResponse: true ; return ; }
Reports
HTML and JSON reports are automatically generated and stored in the default ./reports
folder. This location can be changed by providing a new path using the -r
command line switch:
Event handlers
You can register event handlers for the following events within the cucumber lifecycle.
const {After, Before, AfterAll, BeforeAll} = require('cucumber');
Event | Example |
---|---|
Before | Before(function() { // This hook will be executed before all scenarios}) |
After | After(function() {// This hook will be executed after all scenarios}); |
BeforeAll | BeforeAll(function() {// perform some shared setup}); |
AfterAll | AfterAll(function() {// perform some shared teardown}); |
How to debug
Most webdriverio methods return a JavaScript Promise that is resolved when the method completes. The easiest way to step in with a debugger is to add a .then
method to a selenium function and place a debugger
statement within it, for example:
;