UNPKG

nightwatch

Version:

Easy to use Node.js based end-to-end testing solution for web applications using the W3C WebDriver API.

827 lines (710 loc) 23.2 kB
import {NightwatchDesiredCapabilities} from './desired-capabilities'; import {NightwatchGlobals} from './globals'; export interface NightwatchTestRunner { type?: string; options?: { ui?: string; feature_path?: string; auto_start_session?: boolean; parallel?: number; reporter?: string; reporterOptions?: { [key: string]: any }; }; } export interface NightwatchTestWorker { enabled: boolean; workers?: 'auto' | number; node_options?: string | string[]; } export interface NightwatchScreenshotOptions { enabled: boolean; filename_format?: (failureData: { testSuite: string; testCase: string; isError: boolean; dateObject: Date; }) => string; on_failure?: boolean; on_error?: boolean; path?: string; } export interface NightwatchTestSettingGeneric { /** * A url which can be used later in the tests as the main url to load. * * Can be set to different values in different test environments. * * @alias `baseUrl`, `base_url`, `launchUrl`, `launch_url` in order of precedence. */ baseUrl?: string; /** * A url which can be used later in the tests as the main url to load. * * Can be set to different values in different test environments. * * @alias `baseUrl`, `base_url`, `launchUrl`, `launch_url` in order of precedence. */ base_url?: string; /** * A url which can be used later in the tests as the main url to load. * * Can be set to different values in different test environments. * * @alias `baseUrl`, `base_url`, `launchUrl`, `launch_url` in order of precedence. */ launchUrl?: string; /** * A url which can be used later in the tests as the main url to load. * * Can be set to different values in different test environments. * * @alias `baseUrl`, `base_url`, `launchUrl`, `launch_url` in order of precedence. */ launch_url?: string; /** * The hostname/IP on which the selenium server is accepting connections. * * @deprecated In favour of `selenium.host`. */ selenium_host?: string; /** * The port number on which the selenium server is accepting connections. * * @deprecated In favour of `selenium.port`. */ selenium_port?: number; /** * An array of folders (excluding subfolders) where the tests are located. */ src_folders?: string | string[] | null; /** * An object which will be passed to the Selenium WebDriver when a new session will be created. You can specify browser name for instance along with other capabilities. * Example: * "desiredCapabilities" : { * "browserName" : "firefox", * "acceptSslCerts" : true * } * You can view the complete list of capabilities https://code.google.com/p/selenium/wiki/DesiredCapabilities. */ desiredCapabilities?: NightwatchDesiredCapabilities; /** * An object containing Selenium Server related configuration options. If Selenium Server is not used, webdriver options should be set instead. * * Starting with Nightwatch 1.0, Selenium is only required when testing against a Grid setup or a cloud testing service (such as SauceLabs or BrowserStack). */ selenium?: NightwatchSeleniumOptions; /** * An object containing WebDriver related configuration options. */ webdriver?: WebdriverOptions; /** * Specifies which test runner to use when running the tests. Set to 'default' to use built-in nightwatch runner. * * @example * "test_runner": {"type": "mocha", "options": {"ui": "tdd"}} * * @default 'default' */ test_runner?: string | NightwatchTestRunner; /** * 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"} * * @default false */ test_workers?: boolean | NightwatchTestWorker; /** * Specifies which implementation to use for concurrency, child-process or worker-threads. */ use_child_process?: boolean; /** * Used when running in parallel to specify the delay (in milliseconds) between starting the child processes. * @default 10 */ parallel_process_delay?: number; /** * Enable aborting the test run execution when the first test failure occurs; the remaining test suites will be skipped. * @default false */ enable_fail_fast?: boolean; /** * An object which will be made available within the test and can be overwritten per environment. * * @example * "globals": {"myGlobal": "some_global"} */ globals?: NightwatchGlobals; /** * Set this to `true` if you'd like to persist the same globals object between testsuite runs or have a (deep) copy of it per each testsuite. * * This can be useful when persisting data between test suites is needed, such as a cookie or session information. * @default false */ persist_globals?: boolean; /** * Whether or not to automatically start the Selenium/WebDriver session. If running unit tests, this should be set to false. * @default true */ start_session?: boolean; /** * End the session automatically when the test is being terminated, usually after a failed assertion. * @default true */ end_session_on_fail?: boolean; /** * Skip the remaining test cases from the current test suite, when one test case fails. * @default true */ skip_testcases_on_fail?: boolean; /** * Use xpath as the default locator strategy. * @default false */ use_xpath?: boolean; /** * Should be set to true if connecting to a remote (cloud) service via HTTPS. Also don't forget to set port to 443. * @deprecated In favour of `selenium.ssl`. * @default false */ use_ssl?: boolean; /** * A name property will be added to the `desiredCapabilities` containing the test suite name when this is enabled. It is useful when using cloud testing services. */ sync_test_names?: boolean; /** * Selenium generates screenshots when command errors occur. * * With on_failure set to true, also generates screenshots for failing or erroring tests. These are saved on the disk. * * Since v0.7.5 you can disable screenshots for command errors by setting "on_error" to false. * * @example * "screenshots": { * "enabled": true, * "on_failure": true, * "on_error": false, * "path": "" * } */ screenshots?: NightwatchScreenshotOptions; /** * Controls whether to run tests in unit testing mode, which means the session will not automatically be created.= */ unit_testing_mode?: boolean; /** * Controls whether to run tests in unit testing mode, which means the session will not automatically be created. * @deprecated In favour of `unit_testing_mode`. */ unit_tests_mode?: boolean; /** * An array of folders or file patterns to be skipped (relative to the main source folder). * * @example * "exclude" : ["excluded-folder"] * or: * "exclude" : ["test-folder/*-smoke.js"] */ exclude?: string[] | null; /** * Folder or file pattern to be used when loading the tests. Files that don't match this pattern will be ignored. * * @example * "filter": "tests/*-smoke.js" */ filter?: string | null; /** * Skip a group of tests (a subfolder); can be a list of comma-separated values (no space). */ skipgroup?: string; /** * Skip tests by tag name; can be a list of comma-separated values (no space). */ skiptags?: string; /** * Tag(s) used/to be used during test execution. * Can be a single tag or an array of tags. */ tag_filter?: string | string[]; /** * Whether to show the extended HTTP traffic command logs from the WebDriver or Selenium server. * * @default true (do not show the extended command logs) */ silent?: boolean; /** * Used to disable terminal output completely. * * @default true */ output?: boolean; /** * By default detailed assertion output is displayed while the test is running. * * Set this to false if you'd like to only see the test case name displayed and pass/fail status. * * Detailed output is disabled by default when running tests in parallel. */ detailed_output?: boolean; /** * Set this to true if you'd like to see timestamps next to the logging output. */ output_timestamp?: boolean; /** * The location where the JUnit XML and HTML report files will be saved. Set this to false if you want to disable XML/HTML reporting. * * @default 'tests_output' */ output_folder?: string; /** * Settings for generated reports. */ reporter_options?: { /** * The location where the JUnit XML and HTML report files will be saved. Set this to false if you want to disable XML/HTML reporting. * * @default 'tests_output' */ output_folder?: string, /** * The name of the parent folder to save the HTML report in. * * This can be used to retain the HTML reports for all the test runs, by making the `folder_format` dynamic. * * @example * folder_format: () => Date.now().toString() */ folder_format?: string | (() => string) | null, /** * File name to use while saving the HTML report. * * Can be made dynamic by passing a function. Ex. `filename_format: () => Date.now().toString()` * * @default `index.html` */ filename_format?: string | (() => string) | null, /** * The location where the minimal JSON report should be saved. * This report is used by Nightwatch for its re-run functionality (re-running failed tests from previous run). * * @default 'tests_output/minimal_report.json' */ minimal_report_file_path?: string; }, /** * Use to disable colored output in the terminal. */ disable_colors?: boolean; /** * Set this to true if you'd like to disable bounding boxes on terminal output. Useful when running in some CI environments. */ disable_output_boxes?: boolean, /** * Used when running tests in parallel to determine if the output should be collected and displayed at the end. * * @default false */ live_output?: boolean; /** * Set this to 'iso' if you'd like to see timestamps as ISO strings. */ timestamp_format?: string, /** * Set this to true if you'd like to not display errors during the execution of the test (they are shown at the end always). * * @default false */ disable_error_log?: boolean; /** * Whether or not to show the Base64 image data in the (verbose) log when taking screenshots. * * @default false */ log_screenshot_data?: boolean; /** * Sets the initial window size: {height: number, width: number} */ window_size?: { height: number; width: number; }; } export interface NightwatchOptions extends NightwatchTestSettingGeneric { /** * Location(s) where custom commands will be loaded from. */ custom_commands_path?: string | string[] | null; /** * Location(s) where custom assertions will be loaded from. */ custom_assertions_path?: string | string[] | null; /** * Location(s) where page object files will be loaded from. */ page_objects_path?: string | string[] | null; /** * An array specifying a list of Nightwatch plugin names that should be used. * * @example * plugins: ['@nightwatch/react'] */ plugins?: string[]; /** * Location of the tsconfig file to be used by Nightwatch for running tests written in TS. * @default 'nightwatch/tsconfig.json' */ tsconfig_path?: string; /** * 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. */ globals_path?: string | null; /** * configuration settings for the dotenv module - a zero-dependency module that loads environment variables from a .env file into process.env. More details on https://www.npmjs.com/package/dotenv */ dotenv?: any; /** * Disable support for loading of typescript test files for backwards compatibility with test suites. */ disable_typescript?: boolean; /** * This object contains all the test related options. See below for details. */ test_settings: NightwatchTestSettings; parallel_mode?: boolean; report_prefix?: string; /** * @default junit */ default_reporter?: string | string[]; /** * Set this to true to use the v1.x response format for commands in v2.x when using ES6 async/await. * Can also be used to retain the older functionality of `browser.element()` in v3.x. * * @default false */ backwards_compatibility_mode?: boolean; /** * Set this to true to disable the global objects such as element(), browser, by(), expect() */ disable_global_apis?: boolean; /** * Disable the globally available expect() api. */ disable_global_expect?: boolean; /** * Whether or not to report API command errors that don't deal with DOM elements (e.g. cookie). * @default false */ report_command_errors?: boolean, /** * Whether or not to report network errors (e.g. ECONNRESET errors) * @default true */ report_network_errors?: boolean; /** * Interactive element commands such as "click" or "setValue" can be retried * if an error occurred (such as an "element not interactable" error) */ element_command_retries?: number; /** * Settings related to tracing [DOM History](https://nightwatchjs.org/guide/reporters/dom-history.html#enable-dom-history). */ trace?: { enabled: boolean; path?: string; filename_format?: (failureData: { testSuite: string; testCase: string; isError: boolean; dateObject: Date; }) => string; } /** * Whether or not to consider all commands as being running in async mode. * * Setting this to true will result in all commands returning a promise, even when they are used in non-async tests. */ always_async_commands?: boolean; /** * Settings for anonymous usage metrics collection. */ usage_analytics?: { enabled: boolean; /** * @default './logs/analytics' */ log_path?: string; client_id?: string; } } export interface TimeoutOptions { /** * @default 90000 */ timeout: number; /** * @default 2 */ retry_attempts: number; } export interface WebdriverOptions { /** * When this is enabled, the Webdriver server is run in background in a child process and started/stopped automatically. * * Nightwatch includes support for managing Chromedriver, Geckodriver (Firefox), Safaridriver, and Selenium Server. * * @default false */ start_process?: boolean; /** * Absolute path to the webdriver binary. Only useful if start_process is enabled. * @default none */ server_path?: string | null; /** * Only needed when the Webdriver service is running on a different machine. */ host?: string; /** * The port number on which the Webdriver service will listen and/or on which Nightwatch will attempt to connect. */ port?: number; /** * Should be set to true if connecting to a remote (cloud) service via HTTPS. Also don't forget to set port to 443. */ ssl?: boolean; /** * The location where the Webdriver service log file output.log file will be placed. Defaults to current directory. * * To disable Webdriver logging, set this to false. * @default none */ log_path?: string | boolean; /** * File name to use when writing the webdriver server logs. * * By default, the log file name will be the same as the testsuite file name. */ log_file_name?: string; /** * List of cli arguments to be passed to the Webdriver process. This varies for each Webdriver implementation. * * @default none */ cli_args?: string[] | {}; /** * Some Webdriver implementations (Safari, Edge) support both the W3C Webdriver API as well as the legacy JSON Wire (Selenium) API. * * @default false */ use_legacy_jsonwire?: boolean; /** * Time to wait (in ms) before starting to check the Webdriver server is up and running. * * @default 100 */ check_process_delay?: number; /** * Enable HTTP Keep-Alive. * * If set to true, the keepAlive option is enabled with default settings (`keepAliveMsecs` = 3000). * * If set to an object, you can specify specify the `keepAliveMsecs` value. * * @example * "keep_alive": {"enabled": true, "keepAliveMsecs": 2000} */ keep_alive?: boolean | { enabled: boolean, keepAliveMsecs: number }; /** * Requests to the Webdriver service will timeout in `timeout` milliseconds; a retry will happen `retry_attempts` number of times. * * @example {timeout: 15000, retry_attempts: 5} */ timeout_options?: TimeoutOptions; /** * Interval (in ms) to use between status ping checks when checking if the Webdriver server is up and running. * * @default 100 */ status_poll_interval?: number; /** * Maximum number of ping status check attempts when checking if the Webdriver server is up and running before returning a timeout error. * * @default 5 */ max_status_poll_tries?: number; /** * The entire time (in ms) to wait for the Node.js process to be created and running (default is 2 min), including spawning the child process and checking the status. * * @default 120000 */ process_create_timeout?: number; /** * Interval (in ms) to wait for before sending another request to the WebDriver server in case of an Internal Server Error (5xx). * * Number of times the retry attempts are made depend on `timeout_options.retryAttempts` webdriver setting. */ internal_server_error_retry_interval?: number; /** * Usually only needed for cloud testing Selenium services. In case the server requires credentials this username will be used to compute the `Authorization` header. * * The value can be also an environment variable, in which case it will look like this: * `"username": "${SAUCE_USERNAME}"` * * @default none */ username?: string; /** * This field will be used together with `username` to compute the `Authorization` header. * * Like `username`, the value can be also an environment variable: * `"access_key": "${SAUCE_ACCESS_KEY}"` * * @default none */ access_key?: string; /** * Proxy requests to the Webdriver (or Selenium) service. http, https, socks(v5), socks5, sock4, and pac are accepted. Uses node-proxy-agent. * * @example http://user:pass@host:port * @default none */ proxy?: string; /** * Needed sometimes when using a Selenium Server. The prefix to be added to to all requests (e.g. `/wd/hub`). */ default_path_prefix?: string; /** * Sets the path to the Chrome binary to use. * On Mac OS X, this path should reference the actual Chrome executable, * not just the application binary (e.g. "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"). */ chrome_binary?: string; /** * Sets the path to Chrome's log file. This path should exist on the machine that will launch Chrome. */ chrome_log_file?: string; /** * Configures the ChromeDriver to launch Chrome on Android via adb. */ android_chrome?: false; /** * Sets the path to the Edge binary to use. This path should exist on the machine that will launch Edge. */ edge_binary?: ''; /** * Sets the path to the Edge binary to use. */ edge_log_file?: ''; /** * Sets the binary to use. The binary may be specified as the path to a Firefox executable or a desired release Channel. This path should exist on the machine that will launch Firefox. */ firefox_binary?: ''; /** * Sets the path to an existing profile to use as a template for new browser sessions. * This profile will be copied for each new session - changes will not be applied to the profile itself. */ firefox_profile?: ''; } export interface NightwatchSeleniumOptions { /** * Whether or not to manage the selenium process automatically. * @default false */ start_process?: boolean; /** * Whether or not to automatically start the Selenium session. */ start_session?: boolean; /** * The location of the selenium jar file. Leave empty if @nightwatch/selenium-server is installed. * * @example 'lib/selenium-server-standalone-2.43.0.jar' */ server_path?: string | null; /** * Required when using Selenium 4. Set this to 'standalone'. */ command?: string; /** * The location where the selenium Selenium `output.log` file will be placed. Defaults to current directory. * * To disable Selenium logging, set this to `false`. */ log_path?: string | boolean; /** * The IP address Selenium will listen on and/or Nightwatch will attempt to connect to. */ host?: string; /** * The port number Selenium will listen on and/or Nightwatch will attempt to connect to. */ port?: number; /** * List of cli arguments to be passed to the Selenium process. Here you can set various options for browser drivers, such as: * * `webdriver.firefox.profile`: Selenium will be default create a new Firefox profile for each session. * If you wish to use an existing Firefox profile you can specify its name here. * Complete list of Firefox Driver arguments available https://code.google.com/p/selenium/wiki/FirefoxDriver. * * `webdriver.chrome.driver`: Nightwatch can run the tests using Chrome browser also. To enable this you have to download the ChromeDriver binary * (http://chromedriver.storage.googleapis.com/index.html) and specify it's location here. Also don't forget to specify chrome as the browser name in the * desiredCapabilities object. * More information can be found on the ChromeDriver website (https://sites.google.com/a/chromium.org/chromedriver/). * * `webdriver.ie.driver`: Nightwatch has support for Internet Explorer also. To enable this you have to download the IE Driver binary * (https://code.google.com/p/selenium/wiki/InternetExplorerDriver) and specify it's location here. Also don't forget to specify "internet explorer" as the browser * name in the desiredCapabilities object. */ cli_args?: {}; /** * Set this to true when using Nightwatch to manage and/or connect to an Appium server. */ use_appium?: boolean; /** * Time to wait (in ms) before starting to check the Selenium server is up and running * @default 500 */ check_process_delay?: number; /** * Maximum number of ping status check attempts before returning a timeout error. * @default 15 */ max_status_poll_tries?: number; /** * Interval (in ms) to use between status ping checks when checking if the Selenium server is up and running. * @default 200 */ status_poll_interval?: number; } export interface NightwatchTestOptions extends NightwatchTestSettingGeneric { /** * Path where screenshots captured during test failure or error will be saved. */ screenshotsPath: string; /** * In case the selenium server requires credentials this username will be used to compute the Authorization header. */ username?: string; /** * This field will be used together with username to compute the Authorization header. */ accessKey?: string; } export interface NightwatchTestSettings { [key: string]: NightwatchTestSettingGeneric & { /** * Inherit settings from another environment. */ extends?: string; }; }