From 7e14965826f3fc99009eea1adcfbc5fcb9aec128 Mon Sep 17 00:00:00 2001 From: Christian Mogensen Date: Wed, 19 Dec 2018 21:33:15 +0100 Subject: [PATCH 1/3] Initial document reorg --- docs/acceptance.md | 23 +- docs/advanced.md | 280 ---------------------- docs/angular.md | 6 +- docs/api.md | 306 ++++++++++++++++++++++++ docs/basics.md | 161 +------------ docs/bdd.md | 6 +- docs/data.md | 19 +- docs/datadriven.md | 76 ++++++ docs/debugging.md | 127 ++++++++++ docs/drag-drop.md | 44 ++++ docs/frames.md | 36 +++ docs/helpers.md | 1 - docs/hooks.md | 328 +------------------------- docs/installation.md | 66 +++--- docs/lifecycle.md | 164 +++++++++++++ docs/locators.md | 40 +++- docs/mobile.md | 1 - docs/multi-test.svg | 9 + docs/multi.md | 174 ++++++++++++++ docs/nightmare.md | 1 - docs/pageobjects.md | 1 - docs/parallel-test.svg | 9 + docs/puppeteer.md | 5 +- docs/quickstart.md | 212 ----------------- docs/quickstart/codecept-overview.svg | 9 + docs/quickstart/github1.png | Bin 0 -> 97645 bytes docs/quickstart/github2.png | Bin 0 -> 91174 bytes docs/quickstart/github3.png | Bin 0 -> 44733 bytes docs/quickstart/installation.md | 50 ++++ docs/quickstart/nightmare.md | 115 +++++++++ docs/quickstart/protractor.md | 130 ++++++++++ docs/quickstart/puppeteer.md | 157 ++++++++++++ docs/quickstart/quickstart.md | 49 ++++ docs/quickstart/selenium.md | 147 ++++++++++++ docs/what-is-helper.md | 73 ++++++ mkdocs.yml | 40 +++- 36 files changed, 1815 insertions(+), 1050 deletions(-) create mode 100644 docs/api.md create mode 100644 docs/datadriven.md create mode 100644 docs/debugging.md create mode 100644 docs/drag-drop.md create mode 100644 docs/frames.md create mode 100644 docs/lifecycle.md create mode 100644 docs/multi-test.svg create mode 100644 docs/multi.md create mode 100644 docs/parallel-test.svg delete mode 100644 docs/quickstart.md create mode 100644 docs/quickstart/codecept-overview.svg create mode 100644 docs/quickstart/github1.png create mode 100644 docs/quickstart/github2.png create mode 100644 docs/quickstart/github3.png create mode 100644 docs/quickstart/installation.md create mode 100644 docs/quickstart/nightmare.md create mode 100644 docs/quickstart/protractor.md create mode 100644 docs/quickstart/puppeteer.md create mode 100644 docs/quickstart/quickstart.md create mode 100644 docs/quickstart/selenium.md create mode 100644 docs/what-is-helper.md diff --git a/docs/acceptance.md b/docs/acceptance.md index ebd5305a7..e098645eb 100644 --- a/docs/acceptance.md +++ b/docs/acceptance.md @@ -2,16 +2,13 @@ How does your client, manager, or tester, or any other non-technical person, know your web application is working? By opening the browser, accessing a site, clicking on links, filling in the forms, and actually seeing the content on a web page. -Acceptance (also called End to End) tests can cover standard but complex scenarios from a user's perspective. With acceptance tests you can be confident that users, following all defined scenarios, won't get errors. We check **not just functionality of application but a user interface** (UI) as well. +*Acceptance tests* (also called *End-to-End tests*) can cover standard but complex scenarios from a user's perspective. With acceptance tests you can be confident that users, following all defined scenarios, won't get errors. We check **not just functionality of application but a user interface** (UI) as well. -By default CodeceptJS uses [WebDriverIO](/helpers/WebDriverIO/) helper and **Selenium** to automate browser. Within web page you can locate elements, interact with them, and check that expected elements are present on a page. -However, you can also choose [Nightmare](/helpers/Nightmare) or [Protractor](/helpers/Protractor) helpers, driven by corresponding libraries. -No matter of helper and library you use for acceptance testing, CodeceptJS should execute same actions in similar manner. +No matter of helper and driver you use for acceptance testing, CodeceptJS should execute same actions in similar manner. -In case of CodeceptJS you can be sure that in code it will be as easy as it sounds. You just describe a test scenario with JavaScript DSL and allow the framework to handle the rest. +In case of CodeceptJS you can be sure that in code it will be as easy as it sounds. You just describe a test scenario with JavaScript and allow the framework to handle the rest. Within web page you can locate elements, interact with them, and check that expected elements are present on a page. That is what a test look like. -That is what a test look like. ```js I.amOnPage('/login'); @@ -21,7 +18,7 @@ I.click('Login'); I.see('Welcome, John'); ``` -This is how we can check that login form of a simple web application works. At first we opened `/login` page, then filled forms and in the end we saw the greetings text. +This is how we can check that login form of a simple web application works. At first we opened the `/login` page, then filled in form fields, clicked a button, and in the end we check that we saw the greeting text. ## Locating Element @@ -50,7 +47,7 @@ I.seeElement({name: 'password'}); I.seeElement({id: 'users'}); ``` -In [mobile testing](http://codecept.io/mobile/#locating-elements) you can use `~` to specify accessibility id to locate an element. In web application you can locate element by their `aria-label` value. +In [mobile testing](mobile.md#locating-elements) you can use `~` to specify accessibility id to locate an element. In web application you can locate element by their `aria-label` value. ```js // locate element by [aria-label] attribute in web @@ -247,7 +244,7 @@ If it's hard to define what to wait, it is recommended to use [retries](https:// ## IFrames -[within](/basics/#within) operator can be used to work inside IFrames. Special `frame` locator is required to locate the iframe and get into its context. +[within](locators.md#within) operator can be used to work inside IFrames. Special `frame` locator is required to locate the iframe and get into its context. See example: @@ -339,6 +336,10 @@ Also, you can use `within` inside a session but you can't call session from insi --- -### done() - CodeceptJS through helpers provides user friendly API to interact with a webpage. In this section we described using WebDriverIO helper which allows to control browser through Selenium WebDriver. + +--- + +### Next: [BDD Testing >>>](bdd.md) + +--- diff --git a/docs/advanced.md b/docs/advanced.md index 5f557a774..0aae3ce5e 100644 --- a/docs/advanced.md +++ b/docs/advanced.md @@ -1,81 +1,5 @@ # Advanced Usage -## Data Driven Tests - -Execute the same scenario on a different data set. - -Let's say you want to test login for different user accounts. -In this case, you need to create a datatable and fill it in with credentials. -Then use `Data().Scenario` to include this data and generate multiple scenarios: - -```js -// Define data table inside a test or load from another module -let accounts = new DataTable(['login', 'password']); // -accounts.add(['davert', '123456']); // adding records to a table -accounts.add(['admin', '123456']); - -// You can skip some data. But add them to report as skipped (just like with usual scenarios): -accounts.xadd(['admin', '23456']) - -// Pass dataTable to Data() -// Use special param `current` to get current data set -Data(accounts).Scenario('Test Login', (I, current) => { - I.fillField('Username', current.login); // current is reserved! - I.fillField('Password', current.password); - I.click('Sign In'); - I.see('Welcome '+ current.login); -}); - - -// Also you can set only for Data tests. It will launch executes only the current test but with all data options -Data(accounts).only.Scenario('Test Login', (I, current) => { - I.fillField('Username', current.login); // current is reserved! - I.fillField('Password', current.password); - I.click('Sign In'); - I.see('Welcome '+ current.login); -}); -``` - -*Important: you can't use name `current` for pageObjects or helpers in data scenarios* - -This will produce 2 tests with different data sets. -Current data set is appended to a test name in output: - -```sh -✓ Test Login | {"login":"davert","password":"123456"} -✓ Test Login | {"login":"admin","password":"123456"} -S Test Login | {"login":"admin","password":"23456"} -``` - -```js -// You can filter your data table -Data(accounts.filter(account => account.login == 'admin') -.Scenario('Test Login', (I, current) => { - I.fillField('Username', current.login); - I.fillField('Password', current.password); - I.click('Sign In'); - I.see('Welcome '+ current.login); -}); -``` - -This will limit data sets accoring passed function: - -```sh -✓ Test Login | {"login":"admin","password":"123456"} -S Test Login | {"login":"admin","password":"23456"} -``` - -Data sets can also be defined with array, generator, or a function. - -```js -Data(function*() { - yield { user: 'davert'}; - yield { user: 'andrey'}; -}).Scenario() // ... -``` - -*HINT: If you don't use DataTable. add `toString()` method to each object added to data set, so the data could be pretty printed in a test name* - ## Tags Append `@tag` to your test name, so @@ -106,208 +30,6 @@ Use regex for more flexible filtering: * `--grep '(?=.*@smoke2)^(?!.*@smoke3)'` - run tests with @smoke2 but without @smoke3 in name * `--grep '(?=.*)^(?!.*@smoke4)'` - run all tests except @smoke4 - - -## Debug - -CodeceptJS provides a debug mode in which additional information is printed. -It can be turned on with `--debug` flag. - -```sh -codeceptjs run --debug -``` - -to receive even more information turn on `--verbose` flag: - -```sh -codeceptjs run --verbose -``` - -And don't forget that you can pause execution and enter **interactive console** mode by calling `pause()` inside your test. - -For advanced debugging use NodeJS debugger. In WebStorm IDE: - -```sh -node $NODE_DEBUG_OPTION ./node_modules/.bin/codeceptjs run -``` - -For Visual Studio Code, add the following configuration in launch.json: - -```json -{ - "type": "node", - "request": "launch", - "name": "codeceptjs", - "args": ["run", "--grep", "@your_test_tag"], - "program": "${workspaceFolder}/node_modules/.bin/codeceptjs" -} -``` - - - -## Multiple Browsers Execution - -This is useful if you want to execute same tests but on different browsers and with different configurations or different tests on same browsers in parallel. - -Create `multiple` section in configuration file, and fill it with run suites. Each suite should have `browser` array with browser names or driver helper's configuration: -```js -"multiple": { - "basic": { - // run all tests in chrome and firefox - "browsers": ["chrome", "firefox"] - }, - - "smoke": { - "browsers": [ - "firefox", - // replace any config values from WebDriverIO helper - { - "browser": "chrome", - "windowSize": "maximize", - "desiredCapabilities": { - "acceptSslCerts": true - } - }, - ] - }, -} -``` - -You can use `grep` and `outputName` params to filter tests and output directory for suite: -```js -"multiple": { - "smoke": { - // run only tests containing "@smoke" in name - "grep": "@smoke", - - // store results into `output/smoke` directory - "outputName": "smoke", - - "browsers": [ - "firefox", - {"browser": "chrome", "windowSize": "maximize"} - ] - } -} -``` - -Then tests can be executed using `run-multiple` command. - -Run all suites for all browsers: - -```sh -codeceptjs run-multiple --all -``` - -Run `basic` suite for all browsers - -```sh -codeceptjs run-multiple basic -``` - -Run `basic` suite for chrome only: - -```sh -codeceptjs run-multiple basic:chrome -``` - -Run `basic` suite for chrome and `smoke` for firefox - -```sh -codeceptjs run-multiple basic:chrome smoke:firefox -``` - -Run basic tests with grep and junit reporter - -```sh -codeceptjs run-multiple basic --grep signin --reporter mocha-junit-reporter -``` - -Run regression tests specifying different config path: - -```sh -codeceptjs run-multiple regression -c path/to/config -``` - -Each executed process uses custom folder for reports and output. It is stored in subfolder inside an output directory. Subfolders will be named in `suite_browser` format. - -Output is printed for all running processes. Each line is tagged with a suite and browser name: - -```sh -[basic:firefox] GitHub -- -[basic:chrome] GitHub -- -[basic:chrome] it should not enter -[basic:chrome] ✓ signin in 2869ms - -[basic:chrome] OK | 1 passed // 30s -[basic:firefox] it should not enter -[basic:firefox] ✖ signin in 2743ms - -[basic:firefox] -- FAILURES: -``` - -### Hooks - -Hooks are available when using the `run-multiple` command to perform actions before the test suites start and after the test suites have finished. See [Hooks](https://codecept.io/hooks/#bootstrap-teardown) for an example. - - -## Parallel Execution - -CodeceptJS can be configured to run tests in parallel. - -When enabled, it collects all test files and executes them in parallel by the specified amount of chunks. Given we have five test scenarios (`a_test.js`,`b_test.js`,`c_test.js`,`d_test.js` and `e_test.js`), by setting `"chunks": 2` we tell the runner to run two suites in parallel. The first suite will run `a_test.js`,`b_test.js` and `c_test.js`, the second suite will run `d_test.js` and `e_test.js`. - - -```js -"multiple": { - "parallel": { - // Splits tests into 2 chunks - "chunks": 2 - } -} -``` - -To execute them use `run-multiple` command passing configured suite, which is `parallel` in this example: - -``` -codeceptjs run-multiple parallel -``` - -Grep and multiple browsers are supported. Passing more than one browser will multiply the amount of suites by the amount of browsers passed. The following example will lead to four parallel runs. - -```js -"multiple": { - // 2x chunks + 2x browsers = 4 - "parallel": { - // Splits tests into chunks - "chunks": 2, - // run all tests in chrome and firefox - "browsers": ["chrome", "firefox"] - }, -} -``` - -Passing a function will enable you to provide your own chunking algorithm. The first argument passed to you function is an array of all test files, if you enabled grep the test files passed are already filtered to match the grep pattern. - -```js -"multiple": { - "parallel": { - // Splits tests into chunks by passing an anonymous function, - // only execute first and last found test file - "chunks": (files) => { - return [ - [ files[0] ], // chunk 1 - [ files[files.length-1] ], // chunk 2 - ] - }, - // run all tests in chrome and firefox - "browsers": ["chrome", "firefox"] - } -} -``` - -Note: Chunking will be most effective if you have many individual test files that contain only a small amount of scenarios. Otherwise the combined execution time of many scenarios or big scenarios in one single test file potentially lead to an uneven execution time. - ## Test Options Features and Scenarios have their options that can be set by passing a hash after their names: @@ -386,5 +108,3 @@ Feature('Admin Panel').config({ url: 'https://mysite.com/admin' }); Please note that some config changes can't be applied on the fly. For instance, if you set `restart: false` in your config and then changing value `browser` won't take an effect as browser is already started and won't be closed untill all tests finish. Configuration changes will be reverted after a test or a suite. - -## done() diff --git a/docs/angular.md b/docs/angular.md index 5c38a61f6..0efca18ba 100644 --- a/docs/angular.md +++ b/docs/angular.md @@ -110,7 +110,7 @@ codeceptjs gt ``` After that you can start writing your first CodeceptJS/Angular tests. -Please look into the reference of [Protractor helper](http://codecept.io/helpers/Protractor/) for all available actions. +Please look into the reference of [Protractor helper](helpers/Protractor.md) for all available actions. You can also run `list` command to see methods of I: ```bash @@ -297,6 +297,4 @@ element.all(by.repeater('result in memory')); This way we recommend to implement all custom logic using low-level Protractor syntax and using it inside scenario tests. Please see an [example of such helper](http://codecept.io/helpers/#protractor-example). -### done() - -Almost ) This example is [available on GitHub](https://github.com/DavertMik/codeceptjs-angular-todomvc). \ No newline at end of file +This example is [available on GitHub](https://github.com/DavertMik/codeceptjs-angular-todomvc). \ No newline at end of file diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 000000000..7e0b6a212 --- /dev/null +++ b/docs/api.md @@ -0,0 +1,306 @@ + +# API + +**Use the local CodeceptJS installation to get access to `codeceptjs` module** + +CodeceptJS provides an API which can be loaded via `require('codeceptjs')` when CodeceptJS is installed locally. +These internal objects are available from the require: + +* [`codecept`](https://github.com/Codeception/CodeceptJS/blob/master/lib/codecept.js): test runner class +* [`config`](https://github.com/Codeception/CodeceptJS/blob/master/lib/config.js): current codecept config +* [`event`](https://github.com/Codeception/CodeceptJS/blob/master/lib/event.js): event listener +* [`recorder`](https://github.com/Codeception/CodeceptJS/blob/master/lib/recorder.js): global promise chain +* [`output`](https://github.com/Codeception/CodeceptJS/blob/master/lib/output.js): internal printer +* [`container`](https://github.com/Codeception/CodeceptJS/blob/master/lib/container.js): dependency injection container for tests, includes current helpers and support objects +* [`helper`](https://github.com/Codeception/CodeceptJS/blob/master/lib/helper.js): basic helper class +* [`actor`](https://github.com/Codeception/CodeceptJS/blob/master/lib/actor.js): basic actor (I) class + + +[API reference](https://github.com/Codeception/CodeceptJS/tree/master/docs/api) is available on GitHub. +Also please check the source code of corresponding modules. + +## Event Listeners + +CodeceptJS provides a module with [event dispatcher and set of predefined events](https://github.com/Codeception/CodeceptJS/blob/master/lib/event.js). + +It can be required from codeceptjs package if it is installed locally. + +```js +const event = require('codeceptjs').event; + +module.exports = function() { + + event.dispatcher.on(event.test.before, function (test) { + + console.log('--- I am before test --'); + + }); +} +``` + +Available events: + +* `event.test.before(test)` - *async* when `Before` hooks from helpers and from test is executed +* `event.test.after(test)` - *async* after each test +* `event.test.started(test)` - *sync* at the very beginning of a test. Passes a current test object. +* `event.test.passed(test)` - *sync* when test passed +* `event.test.failed(test, error)` - *sync* when test failed +* `event.test.finished(test)` - *sync* when test finished +* `event.suite.before(suite)` - *async* before a suite +* `event.suite.after(suite)` - *async* after a suite +* `event.step.before(step)` - *async* when the step is scheduled for execution +* `event.step.after(step)`- *async* after a step +* `event.step.started(step)` - *sync* when step starts. +* `event.step.passed(step)` - *sync* when step passed. +* `event.step.failed(step, err)` - *sync* when step failed. +* `event.step.finished(step)` - *sync* when step finishes. +* `event.all.before` - before running tests +* `event.all.after` - after running tests +* `event.all.result` - when results are printed + +* *sync* - means that event is fired in the moment of action happens. +* *async* - means that event is fired when an actions is scheduled. Use `recorder` to schedule your actions. + +For further reference look for [currently available listeners](https://github.com/Codeception/CodeceptJS/tree/master/lib/listener) using event system. + +### Test Object + +Test events provide a test object with following fields: + +* `title` title of a test +* `body` test function as a string +* `opts` additional test options like retries, and others +* `pending` true if test is scheduled for execution and false if a test has finished +* `tags` array of tags for this test +* `file` path to a file with a test. +* `steps` array of executed steps (available only in `test.passed`, `test.failed`, `test.finished` event) + +and others + +### Step Object + +Step events provide step objects with following fields: + +* `name` name of a step, like 'see', 'click', and others +* `actor` current actor, in most cases it `I` +* `helper` current helper instance used to execute this step +* `helperMethod` corresponding helper method, in most cases is the same as `name` +* `status` status of a step (passed or failed) +* `prefix` if a step is executed inside `within` block contain within text, like: 'Within .js-signup-form'. +* `args` passed arguments + +### Recorder + +To inject asynchronous functions in a test or before/after a test you can subscribe to corresponding event and register a function inside a recorder object. [Recorder](https://github.com/Codeception/CodeceptJS/blob/master/lib/recorder.js) represents a global promises chain. + +Provide a function description as a first parameter, function should return a promise: + +```js +const event = require('codeceptjs').event; +const recorder = require('codeceptjs').recorder; +module.exports = function() { + + event.dispatcher.on(event.test.before, function (test) { + + const request = require('request'); + + recorder.add('create fixture data via API', function() { + return new Promise((doneFn, errFn) => { + request({ + baseUrl: 'http://api.site.com/', + method: 'POST', + url: '/users', + json: { name: 'john', email: 'john@john.com' } + }), (err, httpResponse, body) => { + if (err) return errFn(err); + doneFn(); + } + }); + } + }); +} + +``` + +Whenever you execute tests with `--verbose` option you will see registered events and promises executed by a recorder. + + +### Output + +Output module provides 4 verbosity levels. Depending on the mode you can have different information printed using corresponding functions. + +* `default`: prints basic information using `output.print` +* `steps`: toggled by `--steps` option, prints step execution +* `debug`: toggled by `--debug` option, prints steps, and debug information with `output.debug` +* `verbose`: toggled by `--verbose` prints debug information and internal logs with `output.log` + +It is recommended to avoid `console.log` and use output.* methods for printing. + +```js +const output = require('codeceptjs').output; + +output.print('This is basic information'); +output.debug('This is debug information'); +output.log('This is verbose logging information'); +``` + +### Container + +CodeceptJS has a dependency injection container with Helpers and Support objects. +They can be retrieved from the container: + +```js +let container = require('codeceptjs').container; + +// get object with all helpers +let helpers = container.helpers(); + +// get helper by name +let WebDriverIO = container.helpers('WebDriverIO'); + +// get support objects +let support = container.support(); + +// get support object by name +let UserPage = container.support('UserPage'); + +// get all registered plugins +let plugins = container.plugins(); +``` + +New objects can also be added to container in runtime: + +```js +let container = require('codeceptjs').container; + +container.append({ + helpers: { // add helper + MyHelper: new MyHelper({ config1: 'val1' }); + }, + support: { // add page object + UserPage: require('./pages/user'); + } +}) +``` + +Container also contains current Mocha instance: + +```js +let mocha = container.mocha(); +``` + +### Config + +CodeceptJS config can be accessed from `require('codeceptjs').config.get()`: + +```js + +let config = require('codeceptjs').config.get(); + +if (config.myKey == 'value') { + // run hook +} +``` + +## Plugins + +Plugins allow to use CodeceptJS internal API to extend functionality. Use internal event dispatcher, container, output, promise recorder, to create your own reporters, test listeners, etc. + +CodeceptJS includes [built-in plugins](https://codecept.io/plugins/) which extend basic functionality and can be turned on and off on purpose. Taking them as [examples](https://github.com/Codeception/CodeceptJS/tree/master/lib/plugin) you can develop your custom plugins. + +A plugin is a basic JS module returning a function. Plugins can have individual configs which are passed into this function: + +```js +const defaultConfig = { + someDefaultOption: true +} + +module.exports = function(config) { + config = Object.assign(defaultConfig, config); + // do stuff +} +``` + +Plugin can register event listeners or hook into promise chain with recorder. See [API reference](https://github.com/Codeception/CodeceptJS/tree/master/lib/helper). + +To enable your custom plugin in config add it to `plugins` section. Specify path to node module using `require`. + +```js +"plugins": { + "myPlugin": { + "require": "./path/to/my/module", + "enabled": true + } +} +``` + +* `require` - specifies relative path to a plugin file. Path is relative to config file. +* `enabled` - to enable this plugin. + +If a plugin is disabled (`enabled` is not set or false) this plugin can be enabled from command line: + +``` +./node_modules/.bin/codeceptjs run --plugin myPlugin +``` + +Several plugins can be enabled as well: + +``` +./node_modules/.bin/codeceptjs run --plugin myPlugin,allure +``` + +### Example: Execute code for a specific group of tests + +If you need to execute some code before a group of tests, you can [mark these tests with a same tag](https://codecept.io/advanced/#tags). Then to listen for tests where this tag is included (see [test object api](#test-object)). + +Let's say we need to populate database for a group of tests. + +```js +// populate database for slow tests +const event = require('codeceptjs').event; + +module.exports = function() { + + event.dispatcher.on(event.test.before, function (test) { + + if (test.tags.indexOf('@populate') >= 0) { + recorder.add('populate database', async () => { + // populate database for this test + }) + } + }); +} +``` + +## Custom Runner + +CodeceptJS can be imported and used in custom runners. +To initialize Codecept you need to create Config and Container objects. + +```js +let Container = require('codeceptjs').container; +let Codecept = require('codeceptjs').codecept; + +let config = { helpers: { WebDriverIO: { browser: 'chrome', url: 'http://localhost' } } }; +let opts = { steps: true }; + +// create runner +let codecept = new Codecept(config, opts); + +// initialize codeceptjs in current dir +codecept.initGlobals(__dirname); + +// create helpers, support files, mocha +Container.create(config, opts); + +// initialize listeners +codecept.bootstrap(); + +// load tests +codecept.loadTests('*_test.js'); + +// run tests +codecept.run(); +``` + +In this way the Codecept runner class can be extended. diff --git a/docs/basics.md b/docs/basics.md index 0fbb6db5a..f5041cdbd 100644 --- a/docs/basics.md +++ b/docs/basics.md @@ -132,156 +132,6 @@ It is recommended to [filter tests by tags](https://codecept.io/advanced/#tags). > For more options see [full reference of `run` command](https://codecept.io/commands/#run). - -## Debug - -CodeceptJS allows to write and debug tests on the fly while keeping your browser opened. -By using interactive shell you can stop execution at any point and type in CodeceptJS commands. - -This is especially useful while writing a new scratch. After opening a page call `pause()` to start interacting with a page: - -```js -I.amOnPage('/'); -pause(); -``` - -Try to perform your scenario step by step. Then copy succesful commands and insert them into a test. - -### Pause - -Test execution can be paused in any place of a test with `pause()` call. - -This launches interactive console where you can call actions of `I` object. - -``` - Interactive shell started - Press ENTER to resume test - - Use JavaScript syntax to try steps in action - - Press TAB twice to see all available commands - - Enter next to run the next step - I.click - -``` - -Type in different actions to try them, copy valid successful ones to test, update the test file. - -Press `ENTER` to resume test execution. - -To **debug test step-by-step** type `next` and press Enter. The next step will be executed and interactive shell will be shown again. - -To see all available commands press TAB two times to see list of all actions included in I. - -If a test is failing you can prevent browser from closing by putting `pause()` command into `After()` hook. This is very helpful to debug failing tests. This way you can keep the same session and try different actions on a page to get the idea what went wrong. - -```js -After(pause); -``` - -Interactive shell can be started outside the test context by running - -```bash -codeceptjs shell -``` - - -### Screenshot on failure - -By default CodeceptJS saves a screenshot of a failed test. -This can be configured in [screenshotOnFail Plugin](https://codecept.io/plugins/#screenshotonfail) - -### Step By Step Report - -To see how the test was executed, use [stepByStepReport Plugin](https://codecept.io/plugins/#stepbystepreport). It saves a screenshot of each passed step and shows them in a nice slideshow. - - -## Before - -Common preparation steps like opening a web page, logging in a user, can be placed in `Before` or `Background` hook: - -```js -Feature('CodeceptJS Demonstration'); - -Before((I) => { // or Background - I.amOnPage('/documentation'); -}); - -Scenario('test some forms', (I) => { - I.click('Create User'); - I.see('User is valid'); - I.dontSeeInCurrentUrl('/documentation'); -}); - -Scenario('test title', (I) => { - I.seeInTitle('Example application'); -}); -``` - -Same as `Before` you can use `After` to run teardown for each scenario. - -## BeforeSuite - -If you need to run complex setup before all tests and teardown this afterwards you can use `BeforeSuite` and `AfterSuite` -functions. `BeforeSuite` and `AfterSuite` have access to `I` object, but `BeforeSuite/AfterSuite` don't have an access to the browser because it's not running at this moment. -You can use them to execute handlers that will setup your environment. `BeforeSuite/AfterSuite` will work only for a file where it was declared (so you can declare different setups for files) - -```js -BeforeSuite((I) => { - I.syncDown('testfolder'); -}); - -AfterSuite((I) => { - I.syncUp('testfolder'); - I.clearDir('testfolder'); -}); -``` - -[Here are some ideas](https://github.com/Codeception/CodeceptJS/pull/231#issuecomment-249554933) where to use BeforeSuite hooks. - -## Within - -To specify the exact area on a page where actions can be performed you can use `within` function. -Everything executed in its context will be narrowed to context specified by locator: - -Usage: `within('section', ()=>{})` - -```js -I.amOnPage('https://github.com'); -within('.js-signup-form', () => { - I.fillField('user[login]', 'User'); - I.fillField('user[email]', 'user@user.com'); - I.fillField('user[password]', 'user@user.com'); - I.click('button'); -}); -I.see('There were problems creating your account.'); -``` - -`within` can also work with [iframes](/acceptance/#iframes) - -When running steps inside a within block will be shown with a shift: - -![within](http://codecept.io/images/within.png) - -Within can return a value which can be used in a scenario: - -```js -// inside async function -const val = await within('#sidebar', () => { - return I.grabTextFrom({ css: 'h1' }); -}); -I.fillField('Description', val); -``` - -## Comments - -There is a simple way to add additional comments to your test scenario. -Use `say` command to print information to screen: - -```js -I.say('I am going to publish post'); -I.say('I enter title and body'); -I.say('I expect post is visible on site'); -``` - ## IntelliSense If you are using Visual Studio Code or other IDE that supports TypeScript Definitions, @@ -294,12 +144,6 @@ codeceptjs def Now you should include `/// ` into your test files to get method autocompletion while writing tests. -## Skipping - -Like in Mocha you can use `x` and `only` to skip tests or making a single test to run. - -* `xScenario` - skips current test -* `Scenario.only` - executes only the current test ## Retries @@ -371,7 +215,8 @@ Feature('Complex JS Stuff').retry(3); Every Scenario inside this feature will be rerun 3 times. You can make an exception for a specific scenario by passing `retries` option to a Scenario. - --- -### done() +### Next: [Acceptance Testing >>>](acceptance.md) + +--- diff --git a/docs/bdd.md b/docs/bdd.md index e744e41b7..677852bfa 100644 --- a/docs/bdd.md +++ b/docs/bdd.md @@ -339,4 +339,8 @@ To run only tests without features use `--tests` option: codeceptjs run --tests ``` -## done() +--- + +### Next: [Test Lifecycle >>>](lifecycle.md) + +--- \ No newline at end of file diff --git a/docs/data.md b/docs/data.md index 7ff3c6a34..6dc2d7241 100644 --- a/docs/data.md +++ b/docs/data.md @@ -1,6 +1,6 @@ # Data Management -*This chapter describes data management for external sources. If you are looking for using Data Sets in tests, see [Data Driven Tests](http://codecept.io/advanced/#data-drivern-tests) section* +*This chapter describes data management for external sources. If you are looking for using Data Sets in tests, see [Data Driven Tests](datadriven.md) concept* Managing data for tests is always a tricky issue. How isolate data between tests, how to prepare data for different tests, etc. There are different approaches to solve it: @@ -17,13 +17,13 @@ API supposed to be a stable interface and it can be used by acceptance tests. Co ## REST -[REST helper](http://codecept.io/helpers/REST/) uses [Unirest](http://unirest.io/nodejs.html) library to send HTTP requests to application. +[REST helper](helpers/REST.md) uses [Unirest](http://unirest.io/nodejs.html) library to send HTTP requests to application. However, it doesn't provide tools for testing APIs, so it should be paired with WebDriverIO, Nightmare or Protractor helpers for browser testing. Enable REST helper in global config. It is recommended to set `endpoint`, a base URL for all API requests. If you need some authorization you can optionally set default headers too. -See the sample config: +See this sample config: ```js "helpers": { @@ -35,12 +35,15 @@ See the sample config: }, "WebDriverIO" : { - "browser": "chrome" + "browser": "chrome", + "url": "http://localhost/" } } ``` -REST helper provides basic methods to send requests to application: +Note that the WebDriverIO helper is still there, and it is handling all the web-page related commands like `I.click` and so on. + +The `REST` helper provides basic methods to send requests to application: ```js I.sendGetRequest() @@ -52,7 +55,7 @@ I.sendDeleteRequest() As well as a method for setting headers: `haveRequestHeaders`. -Here is a usage example: +Here is an example: ```js let postId = null; @@ -83,7 +86,7 @@ I.sendPostRequest('/update-status', {}, { http_x_requested_with: 'xmlhttprequest ## Data Generation with Factories -This concept is extended by [ApiDataFactory](http://codecept.io/helpers/ApiDataFactory/) helper. +This concept is extended by [ApiDataFactory](helpers/ApiDataFactory.md) helper. It builds data according to defined rules and uses API to store them and automatically clean them up after a test, This way setting data for a test is as simple as writing: @@ -139,6 +142,4 @@ At the end of a test ApiDataFactory will clean up created record for you. This i ids from crated records and running `DELETE /api/users/{id}` requests at the end of a test. This rules can be customized in helper configuration. ---- -### done() diff --git a/docs/datadriven.md b/docs/datadriven.md new file mode 100644 index 000000000..7e5fa2854 --- /dev/null +++ b/docs/datadriven.md @@ -0,0 +1,76 @@ + +# Data Driven Tests + +Execute the same scenario on a different data set. + +Let's say you want to test login for different user accounts. +In this case, you need to create a datatable and fill it in with credentials. +Then use `Data().Scenario` to include this data and generate multiple scenarios: + +```js +// Define data table inside a test or load from another module +let accounts = new DataTable(['login', 'password']); // +accounts.add(['davert', '123456']); // adding records to a table +accounts.add(['admin', '123456']); + +// You can skip some data. But add them to report as skipped (just like with usual scenarios): +accounts.xadd(['admin', '23456']) + +// Pass dataTable to Data() +// Use special param `current` to get current data set +Data(accounts).Scenario('Test Login', (I, current) => { + I.fillField('Username', current.login); // current is reserved! + I.fillField('Password', current.password); + I.click('Sign In'); + I.see('Welcome '+ current.login); +}); + + +// Also you can set only for Data tests. It will launch executes only the current test but with all data options +Data(accounts).only.Scenario('Test Login', (I, current) => { + I.fillField('Username', current.login); // current is reserved! + I.fillField('Password', current.password); + I.click('Sign In'); + I.see('Welcome '+ current.login); +}); +``` + +*Important: you can't use name `current` for pageObjects or helpers in data scenarios* + +This will produce 2 tests with different data sets. +Current data set is appended to a test name in output: + +```sh +✓ Test Login | {"login":"davert","password":"123456"} +✓ Test Login | {"login":"admin","password":"123456"} +S Test Login | {"login":"admin","password":"23456"} +``` + +```js +// You can filter your data table +Data(accounts.filter(account => account.login == 'admin') +.Scenario('Test Login', (I, current) => { + I.fillField('Username', current.login); + I.fillField('Password', current.password); + I.click('Sign In'); + I.see('Welcome '+ current.login); +}); +``` + +This will limit data sets accoring passed function: + +```sh +✓ Test Login | {"login":"admin","password":"123456"} +S Test Login | {"login":"admin","password":"23456"} +``` + +Data sets can also be defined with array, generator, or a function. + +```js +Data(function*() { + yield { user: 'davert'}; + yield { user: 'andrey'}; +}).Scenario() // ... +``` + +*HINT: If you don't use DataTable. add `toString()` method to each object added to data set, so the data could be pretty printed in a test name* diff --git a/docs/debugging.md b/docs/debugging.md new file mode 100644 index 000000000..f3487e588 --- /dev/null +++ b/docs/debugging.md @@ -0,0 +1,127 @@ +# Debugging + +CodeceptJS allows to write and debug tests on the fly while keeping your browser opened. +By using interactive shell you can stop execution at any point and type in CodeceptJS commands. + +This is especially useful while writing a new scratch. After opening a page call `pause()` to start interacting with a page: + +```js +I.amOnPage('/'); +pause(); +``` + +Try to perform your scenario step by step. Then copy succesful commands and insert them into a test. + +## Pause + +Test execution can be paused in any place of a test with `pause()` call. + +This launches interactive console where you can call actions of `I` object. + +``` + Interactive shell started + Press ENTER to resume test + - Use JavaScript syntax to try steps in action + - Press TAB twice to see all available commands + - Enter next to run the next step + I.click + +``` + +Type in different actions to try them, copy valid successful ones to test, update the test file. + +Press `ENTER` to resume test execution. + +To **debug test step-by-step** type `next` and press Enter. The next step will be executed and interactive shell will be shown again. + +To see all available commands press TAB two times to see list of all actions included in I. + +If a test is failing you can prevent browser from closing by putting `pause()` command into `After()` hook. This is very helpful to debug failing tests. This way you can keep the same session and try different actions on a page to get the idea what went wrong. + +```js +After(pause); +``` + +Interactive shell can be started outside the test context by running + +```bash +codeceptjs shell +``` + + +## Screenshot on failure + +By default CodeceptJS saves a screenshot of a failed test. +This can be configured in [screenshotOnFail Plugin](plugins.md#screenshotonfail) + +## Step By Step Report + +To see how the test was executed, use [stepByStepReport Plugin](plugins.md#stepbystepreport). It saves a screenshot of each passed step and shows them in a nice slideshow. + + +## Debug Mode + +CodeceptJS provides a debug mode in which additional information is printed. +It can be turned on with `--debug` flag. + +```sh +codeceptjs run --debug +``` + +to receive even more information turn on `--verbose` flag: + +```sh +codeceptjs run --verbose +``` + +And don't forget that you can pause execution and enter **interactive console** mode by calling `pause()` inside your test. + +## Attach Debugger + +For advanced debugging use NodeJS debugger. In **WebStorm IDE**: + +```sh +node $NODE_DEBUG_OPTION ./node_modules/.bin/codeceptjs run +``` + +For **Visual Studio Code**, add the following configuration in launch.json: + +```json +{ + "type": "node", + "request": "launch", + "name": "codeceptjs", + "args": ["run", "--grep", "@your_test_tag"], + "program": "${workspaceFolder}/node_modules/.bin/codeceptjs" +} +``` +This will let you set breakpoints inside your tests. + +```js +Scenario('test', (I) => { + I.amOnPage('/'); + I.click('Login'); + I.see('Please Login', 'h1'); + // ... +}); +``` + +You will be disappointed first time you try. The actor functions in CodeceptJS (like `I.click('Login')`) are asynchronous. They add actions to a promise chain but do not wait for the action to complete. You can step,step,step and nothing happens in the browser. + +The easy way to solve this is to add `await` for all actor calls. This forces the test to wait for the promise chain to finish. + +```js +Scenario('test', async (I) => { + await I.amOnPage('/'); + await I.click('Login'); + await I.see('Please Login', 'h1'); + // ... +}); +``` + + +--- + +### Next: [Helpers >>>](helpers.md) + +--- \ No newline at end of file diff --git a/docs/drag-drop.md b/docs/drag-drop.md new file mode 100644 index 000000000..832d59e39 --- /dev/null +++ b/docs/drag-drop.md @@ -0,0 +1,44 @@ +# Drag and Drop + +There is no browser support for drag-and-drop, so every page builds its own version. + +Most of the Codecept helpers do support a `dragAndDrop` command, but whether it will work for your implementation of dragging varies. + +### dragAndDrop + +Drag an item to a destination element. + +```js +I.dragAndDrop('#dragHandle', '#container'); +``` + +#### Parameters + +- `srcElement` located by CSS|XPath|strict locator. +- `destElement` located by CSS|XPath|strict locator. + +## JQueryUI Drag+Drop Example + +Using http://jqueryui.com/resources/demos/droppable/default.html + +```js +// Drag item from source to target (no iframe) @dragNdrop', +I.amOnPage('http://jqueryui.com/resources/demos/droppable/default.html') +I.seeElementInDOM('#draggable') +I.dragAndDrop('#draggable', '#droppable') +I.see('Dropped'); +``` + +## JQuery Drag+Drop within iframe + +Using http://jqueryui.com/droppable + +```js +// Drag and drop from within an iframe +I.amOnPage('http://jqueryui.com/droppable') +I.resizeWindow(700, 700) +I.switchTo('//iframe[@class="demo-frame"]') +I.seeElementInDOM('#draggable') +I.dragAndDrop('#draggable', '#droppable') +I.see('Dropped'); +``` diff --git a/docs/frames.md b/docs/frames.md new file mode 100644 index 000000000..5f1913676 --- /dev/null +++ b/docs/frames.md @@ -0,0 +1,36 @@ +# Within frames and iframes + +Codecept supports working within multiple frames on a page using the `within` function. + +Note that waits for the iframe page follow the same model as page-to-page navigation, and if your frame takes too long to load, it may break your test. + +## IFrames + +The [within](locators.md#within) operator can be used to work inside IFrames. Special `frame` locator is required to locate the iframe and get into its context. + +For example: + +```js +within({frame: "#editor"}, () => { + I.see('Page'); +}); +``` + +Nested IFrames can be set by passing array *(WebDriverIO, Nightmare & Puppeteer only)*: + +```js +within({frame: [".content", "#editor"]}, () => { + I.see('Page'); +}); +``` + +Please take a note that you can't use within inside another within in Puppeteer helper: + +```js +within('.todoapp', () => { + I.createTodo('my new item'); + I.see('1 item left', '.todo-count'); + I.click('.todo-list input.toggle'); +}); +I.see('0 items left', '.todo-count'); +``` diff --git a/docs/helpers.md b/docs/helpers.md index e3ccaa17b..a06e36dc4 100644 --- a/docs/helpers.md +++ b/docs/helpers.md @@ -253,4 +253,3 @@ _before() { Retry rules are available in array `recorder.retries`. The last retry rule can be disabled by running `recorder.retries.pop()`; -### done() diff --git a/docs/hooks.md b/docs/hooks.md index 1e1a7f59b..8087c2e72 100644 --- a/docs/hooks.md +++ b/docs/hooks.md @@ -18,7 +18,9 @@ There are different ways to define bootstrap and teardown functions: Corresponding examples provided in next sections. -### Example: Async Bootstrap in a Function +## Examples + +### Async Bootstrap in a Function Add to `codecept.conf.js`: @@ -167,327 +169,3 @@ exports.config = { **Note**: The `bootstrapAll` and `teardownAll` hooks are only called when using [Multiple Execution](http://codecept.io/advanced/#multiple-execution). - -## API - -**Use local CodeceptJS installation to get access to `codeceptjs` module** - -CodeceptJS provides an API which can be loaded via `require('codeceptjs')` when CodeceptJS is installed locally. -These internal objects are available: - -* [`codecept`](https://github.com/Codeception/CodeceptJS/blob/master/lib/codecept.js): test runner class -* [`config`](https://github.com/Codeception/CodeceptJS/blob/master/lib/config.js): current codecept config -* [`event`](https://github.com/Codeception/CodeceptJS/blob/master/lib/event.js): event listener -* [`recorder`](https://github.com/Codeception/CodeceptJS/blob/master/lib/recorder.js): global promise chain -* [`output`](https://github.com/Codeception/CodeceptJS/blob/master/lib/output.js): internal printer -* [`container`](https://github.com/Codeception/CodeceptJS/blob/master/lib/container.js): dependency injection container for tests, includes current helpers and support objects -* [`helper`](https://github.com/Codeception/CodeceptJS/blob/master/lib/helper.js): basic helper class -* [`actor`](https://github.com/Codeception/CodeceptJS/blob/master/lib/actor.js): basic actor (I) class - -[API reference](https://github.com/Codeception/CodeceptJS/tree/master/docs/api) is available on GitHub. -Also please check the source code of corresponding modules. - -### Event Listeners - -CodeceptJS provides a module with [event dispatcher and set of predefined events](https://github.com/Codeception/CodeceptJS/blob/master/lib/event.js). - -It can be required from codeceptjs package if it is installed locally. - -```js -const event = require('codeceptjs').event; - -module.exports = function() { - - event.dispatcher.on(event.test.before, function (test) { - - console.log('--- I am before test --'); - - }); -} -``` - -Available events: - -* `event.test.before(test)` - *async* when `Before` hooks from helpers and from test is executed -* `event.test.after(test)` - *async* after each test -* `event.test.started(test)` - *sync* at the very beginning of a test. Passes a current test object. -* `event.test.passed(test)` - *sync* when test passed -* `event.test.failed(test, error)` - *sync* when test failed -* `event.test.finished(test)` - *sync* when test finished -* `event.suite.before(suite)` - *async* before a suite -* `event.suite.after(suite)` - *async* after a suite -* `event.step.before(step)` - *async* when the step is scheduled for execution -* `event.step.after(step)`- *async* after a step -* `event.step.started(step)` - *sync* when step starts. -* `event.step.passed(step)` - *sync* when step passed. -* `event.step.failed(step, err)` - *sync* when step failed. -* `event.step.finished(step)` - *sync* when step finishes. -* `event.all.before` - before running tests -* `event.all.after` - after running tests -* `event.all.result` - when results are printed - -* *sync* - means that event is fired in the moment of action happens. -* *async* - means that event is fired when an actions is scheduled. Use `recorder` to schedule your actions. - -For further reference look for [currently available listeners](https://github.com/Codeception/CodeceptJS/tree/master/lib/listener) using event system. - -#### Test Object - -Test events provide a test object with following fields: - -* `title` title of a test -* `body` test function as a string -* `opts` additional test options like retries, and others -* `pending` true if test is scheduled for execution and false if a test has finished -* `tags` array of tags for this test -* `file` path to a file with a test. -* `steps` array of executed steps (available only in `test.passed`, `test.failed`, `test.finished` event) - -and others - -#### Step Object - -Step events provide step objects with following fields: - -* `name` name of a step, like 'see', 'click', and others -* `actor` current actor, in most cases it `I` -* `helper` current helper instance used to execute this step -* `helperMethod` corresponding helper method, in most cases is the same as `name` -* `status` status of a step (passed or failed) -* `prefix` if a step is executed inside `within` block contain within text, like: 'Within .js-signup-form'. -* `args` passed arguments - -### Recorder - -To inject asynchronous functions in a test or before/after a test you can subscribe to corresponding event and register a function inside a recorder object. [Recorder](https://github.com/Codeception/CodeceptJS/blob/master/lib/recorder.js) represents a global promises chain. - -Provide a function description as a first parameter, function should return a promise: - -```js -const event = require('codeceptjs').event; -const recorder = require('codeceptjs').recorder; -module.exports = function() { - - event.dispatcher.on(event.test.before, function (test) { - - const request = require('request'); - - recorder.add('create fixture data via API', function() { - return new Promise((doneFn, errFn) => { - request({ - baseUrl: 'http://api.site.com/', - method: 'POST', - url: '/users', - json: { name: 'john', email: 'john@john.com' } - }), (err, httpResponse, body) => { - if (err) return errFn(err); - doneFn(); - } - }); - } - }); -} - -``` - -Whenever you execute tests with `--verbose` option you will see registered events and promises executed by a recorder. - - -### Output - -Output module provides 4 verbosity levels. Depending on the mode you can have different information printed using corresponding functions. - -* `default`: prints basic information using `output.print` -* `steps`: toggled by `--steps` option, prints step execution -* `debug`: toggled by `--debug` option, prints steps, and debug information with `output.debug` -* `verbose`: toggled by `--verbose` prints debug information and internal logs with `output.log` - -It is recommended to avoid `console.log` and use output.* methods for printing. - -```js -const output = require('codeceptjs').output; - -output.print('This is basic information'); -output.debug('This is debug information'); -output.log('This is verbose logging information'); -``` - -### Container - -CodeceptJS has a dependency injection container with Helpers and Support objects. -They can be retrieved from the container: - -```js -let container = require('codeceptjs').container; - -// get object with all helpers -let helpers = container.helpers(); - -// get helper by name -let WebDriverIO = container.helpers('WebDriverIO'); - -// get support objects -let support = container.support(); - -// get support object by name -let UserPage = container.support('UserPage'); - -// get all registered plugins -let plugins = container.plugins(); -``` - -New objects can also be added to container in runtime: - -```js -let container = require('codeceptjs').container; - -container.append({ - helpers: { // add helper - MyHelper: new MyHelper({ config1: 'val1' }); - }, - support: { // add page object - UserPage: require('./pages/user'); - } -}) -``` - -Container also contains current Mocha instance: - -```js -let mocha = container.mocha(); -``` - -### Config - -CodeceptJS config can be accessed from `require('codeceptjs').config.get()`: - -```js - -let config = require('codeceptjs').config.get(); - -if (config.myKey == 'value') { - // run hook -} -``` - -## Plugins - -Plugins allow to use CodeceptJS internal API to extend functionality. Use internal event dispatcher, container, output, promise recorder, to create your own reporters, test listeners, etc. - -CodeceptJS includes [built-in plugins](https://codecept.io/plugins/) which extend basic functionality and can be turned on and off on purpose. Taking them as [examples](https://github.com/Codeception/CodeceptJS/tree/master/lib/plugin) you can develop your custom plugins. - -A plugin is a basic JS module returning a function. Plugins can have individual configs which are passed into this function: - -```js -const defaultConfig = { - someDefaultOption: true -} - -module.exports = function(config) { - config = Object.assign(defaultConfig, config); - // do stuff -} -``` - -Plugin can register event listeners or hook into promise chain with recorder. See [API reference](https://github.com/Codeception/CodeceptJS/tree/master/lib/helper). - -To enable your custom plugin in config add it to `plugins` section. Specify path to node module using `require`. - -```js -"plugins": { - "myPlugin": { - "require": "./path/to/my/module", - "enabled": true - } -} -``` - -* `require` - specifies relative path to a plugin file. Path is relative to config file. -* `enabled` - to enable this plugin. - -If a plugin is disabled (`enabled` is not set or false) this plugin can be enabled from command line: - -``` -./node_modules/.bin/codeceptjs run --plugin myPlugin -``` - -Several plugins can be enabled as well: - -``` -./node_modules/.bin/codeceptjs run --plugin myPlugin,allure -``` - -### Example: Execute code for a specific group of tests - -If you need to execute some code before a group of tests, you can [mark these tests with a same tag](https://codecept.io/advanced/#tags). Then to listen for tests where this tag is included (see [test object api](#test-object)). - -Let's say we need to populate database for a group of tests. - -```js -// populate database for slow tests -const event = require('codeceptjs').event; - -module.exports = function() { - - event.dispatcher.on(event.test.before, function (test) { - - if (test.tags.indexOf('@populate') >= 0) { - recorder.add('populate database', async () => { - // populate database for this test - }) - } - }); -} -``` - -## Custom Hooks - -*(deprecated, use [plugins](#plugins))* - -Hooks are JavaScript files same as for bootstrap and teardown, which can be registered inside `hooks` section of config. Unlike `bootstrap` you can have multiple hooks registered: - -```json -"hooks": [ - "./server.js", - "./data_builder.js", - "./report_notification.js" -] -``` - -Inside those JS files you can use CodeceptJS API (see below) to access its internals. - - -## Custom Runner - -CodeceptJS can be imported and used in custom runners. -To initialize Codecept you need to create Config and Container objects. - -```js -let Container = require('codeceptjs').container; -let Codecept = require('codeceptjs').codecept; - -let config = { helpers: { WebDriverIO: { browser: 'chrome', url: 'http://localhost' } } }; -let opts = { steps: true }; - -// create runner -let codecept = new Codecept(config, opts); - -// initialize codeceptjs in current dir -codecept.initGlobals(__dirname); - -// create helpers, support files, mocha -Container.create(config, opts); - -// initialize listeners -codecept.bootstrap(); - -// load tests -codecept.loadTests('*_test.js'); - -// run tests -codecept.run(); -``` - -In this way Codecept runner class can be extended. - -## done() diff --git a/docs/installation.md b/docs/installation.md index d4794bcb4..aba1b3b50 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -1,41 +1,49 @@ # Installation -## Local +## Global Installation -Use NPM install CodeceptJS: +CodeceptJS can be installed together with a suitable driver via NPM globally: ```sh -npm install --save-dev codeceptjs +[sudo] npm install -g codeceptjs webdriverio +# or +[sudo] npm install -g codeceptjs protractor +# or +[sudo] npm install -g codeceptjs puppeteer +# or +[sudo] npm install -g codeceptjs nightmare ``` -and started as +then it can be started as ```sh -./node_modules/.bin/codeceptjs +codeceptjs ``` -To use it with WebDriverIO install webdriverio package: +Global installations are easier to use on the command-line, but are not registered in the `package.json` manifest, so they won't be automatically installed for others who download your source code. It also means you need to install these tools on the CI/Build servers before you can run the tests there. -```sh -npm install webdriverio --save-dev -``` +## Local Installation -To use it with Protractor install protractor package: +Use NPM install CodeceptJS: ```sh -npm install protractor --save-dev +npm install --save-dev codeceptjs ``` -To use it with Nightmare install nightmare and nightmare-upload packages: - ```sh -npm install nightmare --save-dev +npm install --save-dev codeceptjs webdriverio +# or +npm install --save-dev codeceptjs protractor +# or +npm install --save-dev codeceptjs puppeteer +# or +npm install --save-dev codeceptjs nightmare ``` -To use it with Puppeteer install puppeteer package: +and started as ```sh -npm install puppeteer --save-dev +./node_modules/.bin/codeceptjs ``` ## WebDriver @@ -45,9 +53,14 @@ WebDriver based helpers like WebDriverIO, Protractor, Selenium WebDriver will re We recommend to install them manually or use NPM packages: * [Selenium Standalone](https://www.npmjs.com/package/selenium-standalone) to install and run Selenium, ChromeDriver, Firefox Driver with one package. + ```sh + npm install selenium-standalone --save-dev + ``` + Selenium is [Java](https://www.java.com/en/download/) based, so you may need to install or update that first. + * [Phantomjs](https://www.npmjs.com/package/phantomjs-prebuilt): to install and execute Phantomjs -or use [Docker](https://github.com/SeleniumHQ/docker-selenium) for headless browser testing. +or use [Docker with Selenium](https://github.com/SeleniumHQ/docker-selenium) for headless browser testing in a container. Launch Selenium with Chrome browser inside a Docker container: @@ -55,22 +68,3 @@ Launch Selenium with Chrome browser inside a Docker container: docker run --net=host selenium/standalone-chrome ``` -## Global - -CodeceptJS can be installed via NPM globally: - -```sh -[sudo] npm install -g codeceptjs webdriverio -# or -[sudo] npm install -g codeceptjs protractor -# or -[sudo] npm install -g codeceptjs puppeteer -# or -[sudo] npm install -g codeceptjs nightmare -``` - -then it can be started as - -```sh -codeceptjs -``` diff --git a/docs/lifecycle.md b/docs/lifecycle.md new file mode 100644 index 000000000..73d8fa4cc --- /dev/null +++ b/docs/lifecycle.md @@ -0,0 +1,164 @@ +# Test Lifecycle + +CodeceptJS running-a-test lifecycle + +1. Run `BeforeSuite()` function +2. Start browser for test +3. Run `Before()` function to set up test +4. Run the test +5. Run the `After()` function to clean up +6. Close the browser +7. Run `AfterSuite()` function + + +## Mocha + +CodeceptJS is built on top of the [Mocha testing framework](https://mochajs.org/), but for the most part it is hidden beneath the CodeceptJS API. + +There are two places Mocha shows up. + +1. [Mocha Reports](reports.md) allow you to customize the result output into various formats. + +2. Configuring the test runner behavior so that it stops on the first failure, using Mocha's **bail** feature. + +## Feature + +Features name and group a bunch of scenarios. +The feature name can contain tags to help with filtering tests to run. + + +## Scenario + +Each test is a `Scenario`. + +It takes an actor `I` as a parameter, and possible other parameters representing page objects that the test needs. + +```js +Feature('CodeceptJS Demonstration'); + +Scenario('test some forms', (I) => { + I.amOnPage('/documentation'); + I.click('Create User'); + I.see('User is valid'); +}); + +Scenario('test title is Example', (I) => { + I.amOnPage('/documentation'); + I.seeInTitle('Example application'); +}); +``` + + +* `xScenario` - skips this test +* `Scenario.only` - executes only this test + +```js +Feature('CodeceptJS Demonstration'); + +xScenario('test some forms', (I) => { + I.amOnPage('/documentation'); + I.click('Create User'); + I.see('User is valid'); + I.dontSeeInCurrentUrl('/documentation'); +}); + +Scenario.only('test title is Example', (I) => { + I.amOnPage('/documentation'); + I.seeInTitle('Example application'); +}); +``` + + +## Before + +Common preparation steps like opening a web page, logging in a user, can be placed in `Before` or `Background` hook: + +```js +Feature('CodeceptJS Demonstration'); + +Before((I) => { // or Background + I.amOnPage('/documentation'); +}); + +Scenario('test some forms', (I) => { + I.click('Create User'); + I.see('User is valid'); + I.dontSeeInCurrentUrl('/documentation'); +}); + +Scenario('test title', (I) => { + I.seeInTitle('Example application'); +}); +``` + +Same as `Before` you can use `After` to run teardown for each scenario. + +## After + +Common cleanup that is run after each test, but before the browser is closed. + +```js +Feature('CodeceptJS Demonstration'); + +After((I) => { // or Background + I.click('Logout'); +}); + +Scenario('test some forms', (I) => { + I.click('Create User'); + I.see('User is valid'); + I.dontSeeInCurrentUrl('/documentation'); +}); + +Scenario('test title', (I) => { + I.seeInTitle('Example application'); +}); +``` + + +## BeforeSuite + +If you need to run complex setup before all tests and teardown this afterwards you can use `BeforeSuite` and `AfterSuite` +functions. `BeforeSuite` and `AfterSuite` have access to `I` object, but `BeforeSuite/AfterSuite` don't have an access to the browser because it's not running at this moment. +You can use them to execute handlers that will setup your environment. `BeforeSuite/AfterSuite` will work only for a file where it was declared (so you can declare different setups for files) + +```js +BeforeSuite((I) => { + I.syncDown('testfolder'); +}); + +AfterSuite((I) => { + I.syncUp('testfolder'); + I.clearDir('testfolder'); +}); +``` + +[Here are some ideas](https://github.com/Codeception/CodeceptJS/pull/231#issuecomment-249554933) where to use BeforeSuite hooks. + + +## AfterSuite + + +## Comments + +There is a simple way to add additional comments to your test scenario. +Use `say` command to print information to screen: + +```js +I.say('I am going to publish post'); +I.say('I enter title and body'); +I.say('I expect post is visible on site'); +``` + +## Skipping + +Like in Mocha you can use `x` and `only` to skip tests or making a single test to run. + +* `xScenario` - skips current test +* `Scenario.only` - executes only the current test + +--- + +### Next: [Locators >>>](locators.md) + +--- diff --git a/docs/locators.md b/docs/locators.md index 78081cdb6..f068e19ca 100644 --- a/docs/locators.md +++ b/docs/locators.md @@ -205,4 +205,42 @@ ID locators are best to select the exact semantic element in web and mobile test * `#user` or `{ id: 'user' }` finds element with id="user" * `~user` finds element with accessibility id "user" (in Mobile testing) or with `aria-label=user`. -### done() \ No newline at end of file +## Within + +To specify the exact area on a page where actions can be performed you can use `within` function. +Everything executed in its context will be narrowed to context specified by locator: + +Usage: `within('section', ()=>{})` + +```js +I.amOnPage('https://github.com'); +within('.js-signup-form', () => { + I.fillField('user[login]', 'User'); + I.fillField('user[email]', 'user@user.com'); + I.fillField('user[password]', 'user@user.com'); + I.click('button'); +}); +I.see('There were problems creating your account.'); +``` + +`within` can also work with [iframes](acceptance.md#iframes) + +When running steps inside a within block will be shown with a shift: + +![within](http://codecept.io/images/within.png) + +Within can return a value which can be used in a scenario: + +```js +// inside async function +const val = await within('#sidebar', () => { + return I.grabTextFrom({ css: 'h1' }); +}); +I.fillField('Description', val); +``` + +--- + +### Next: [Debugging >>>](debugging.md) + +--- diff --git a/docs/mobile.md b/docs/mobile.md index 1243d8fb6..48f5adb75 100644 --- a/docs/mobile.md +++ b/docs/mobile.md @@ -284,4 +284,3 @@ Just as you can specify android, and ios-specific locators, you can do so for we I.click({web: '#login', ios: '//UIAApplication[1]/UIAWindow[1]/UIAButton[1]'}); ``` -## done() diff --git a/docs/multi-test.svg b/docs/multi-test.svg new file mode 100644 index 000000000..88c1433b7 --- /dev/null +++ b/docs/multi-test.svg @@ -0,0 +1,9 @@ + + +TestATestBTestCTestDTestEFirefoxChrome \ No newline at end of file diff --git a/docs/multi.md b/docs/multi.md new file mode 100644 index 000000000..9e424cffa --- /dev/null +++ b/docs/multi.md @@ -0,0 +1,174 @@ +# Multiple and Parallel Testing + +Multiple is a way to run the same set of tests using different browsers. + +Parallel testing is when many instances of the same browser are used at the same time to cut down on execution time. + +These two concepts can be combined. + +## Multiple Browsers Execution + +![](multi-test.svg) + +This is useful if you want to execute same tests but on different browsers and with different configurations or different tests on same browsers in parallel. + +Create `multiple` section in configuration file, and fill it with run suites. Each suite should have `browser` array with browser names or driver helper's configuration: +```js +"multiple": { + "basic": { + // run all tests in chrome and firefox + "browsers": ["chrome", "firefox"] + }, + + "smoke": { + "browsers": [ + "firefox", + // replace any config values from WebDriverIO helper + { + "browser": "chrome", + "windowSize": "maximize", + "desiredCapabilities": { + "acceptSslCerts": true + } + }, + ] + }, +} +``` + +You can use `grep` and `outputName` params to filter tests and output directory for suite: +```js +"multiple": { + "smoke": { + // run only tests containing "@smoke" in name + "grep": "@smoke", + + // store results into `output/smoke` directory + "outputName": "smoke", + + "browsers": [ + "firefox", + {"browser": "chrome", "windowSize": "maximize"} + ] + } +} +``` + +Then tests can be executed using `run-multiple` command. + +Run all suites for all browsers: + +```sh +codeceptjs run-multiple --all +``` + +Run `basic` suite for all browsers + +```sh +codeceptjs run-multiple basic +``` + +Run `basic` suite for chrome only: + +```sh +codeceptjs run-multiple basic:chrome +``` + +Run `basic` suite for chrome and `smoke` for firefox + +```sh +codeceptjs run-multiple basic:chrome smoke:firefox +``` + +Run basic tests with grep and junit reporter + +```sh +codeceptjs run-multiple basic --grep signin --reporter mocha-junit-reporter +``` + +Run regression tests specifying different config path: + +```sh +codeceptjs run-multiple regression -c path/to/config +``` + +Each executed process uses custom folder for reports and output. It is stored in subfolder inside an output directory. Subfolders will be named in `suite_browser` format. + +Output is printed for all running processes. Each line is tagged with a suite and browser name: + +```sh +[basic:firefox] GitHub -- +[basic:chrome] GitHub -- +[basic:chrome] it should not enter +[basic:chrome] ✓ signin in 2869ms + +[basic:chrome] OK | 1 passed // 30s +[basic:firefox] it should not enter +[basic:firefox] ✖ signin in 2743ms + +[basic:firefox] -- FAILURES: +``` + +### Hooks + +Hooks are available when using the `run-multiple` command to perform actions before the test suites start and after the test suites have finished. See [Hooks](hooks.md#bootstrap-teardown) for an example. + +## Parallel Execution + +![](parallel-test.svg) + +CodeceptJS can be configured to run tests in parallel. + +When enabled, it collects all test files and executes them in parallel by the specified amount of chunks. Given we have five test scenarios (`a_test.js`,`b_test.js`,`c_test.js`,`d_test.js` and `e_test.js`), by setting `"chunks": 2` we tell the runner to run two suites in parallel. The first suite will run `a_test.js`,`b_test.js` and `c_test.js`, the second suite will run `d_test.js` and `e_test.js`. + + +```js +"multiple": { + "parallel": { + // Splits tests into 2 chunks + "chunks": 2 + } +} +``` + +To execute them use `run-multiple` command passing configured suite, which is `parallel` in this example: + +``` +codeceptjs run-multiple parallel +``` + +Grep and multiple browsers are supported. Passing more than one browser will multiply the amount of suites by the amount of browsers passed. The following example will lead to four parallel runs. + +```js +"multiple": { + // 2x chunks + 2x browsers = 4 + "parallel": { + // Splits tests into chunks + "chunks": 2, + // run all tests in chrome and firefox + "browsers": ["chrome", "firefox"] + }, +} +``` + +Passing a function will enable you to provide your own chunking algorithm. The first argument passed to you function is an array of all test files, if you enabled grep the test files passed are already filtered to match the grep pattern. + +```js +"multiple": { + "parallel": { + // Splits tests into chunks by passing an anonymous function, + // only execute first and last found test file + "chunks": (files) => { + return [ + [ files[0] ], // chunk 1 + [ files[files.length-1] ], // chunk 2 + ] + }, + // run all tests in chrome and firefox + "browsers": ["chrome", "firefox"] + } +} +``` + +Note: Chunking will be most effective if you have many individual test files that contain only a small amount of scenarios. Otherwise the combined execution time of many scenarios or big scenarios in one single test file potentially lead to an uneven execution time. + diff --git a/docs/nightmare.md b/docs/nightmare.md index bf140c806..5190d91de 100644 --- a/docs/nightmare.md +++ b/docs/nightmare.md @@ -221,4 +221,3 @@ use locate found elements on a page and return attribute from the first of them. * [Nightmare Tutorial](http://codenroll.it/acceptance-testing-with-codecept-js/) by jploskonka. -## done() diff --git a/docs/pageobjects.md b/docs/pageobjects.md index e14410ae4..cc1e2e3db 100644 --- a/docs/pageobjects.md +++ b/docs/pageobjects.md @@ -233,4 +233,3 @@ Scenario('search @grop', (I, Data) => { This requires `./data.js` module and assigns it to `Data` argument in a test. -### done() diff --git a/docs/parallel-test.svg b/docs/parallel-test.svg new file mode 100644 index 000000000..e980fc7d8 --- /dev/null +++ b/docs/parallel-test.svg @@ -0,0 +1,9 @@ + + +TestATestBTestCTestDTestEFirefoxFirefox \ No newline at end of file diff --git a/docs/puppeteer.md b/docs/puppeteer.md index 781887551..27386844a 100644 --- a/docs/puppeteer.md +++ b/docs/puppeteer.md @@ -162,9 +162,9 @@ within('.todoapp', () => { I.see('0 items left', '.todo-count'); ``` -CodeceptJS allows you to implement custom actions like `I.createTodo` or use **PageObjects**. Learn how to improve your tests in [PageObjects](http://codecept.io/pageobjects/) guide. +CodeceptJS allows you to implement custom actions like `I.createTodo` or use **PageObjects**. Learn how to improve your tests in [PageObjects](pageobjects.md) guide. -`within` can also work with [iframes](/acceptance/#iframes) +`within` can also work with [iframes](acceptance.md#iframes) When running steps inside a within block will be shown with a shift: @@ -194,6 +194,5 @@ async renderPageToPdf() { The same way you can also access `browser` object to implement more actions or handle events. [Learn more about Helpers](http://codecept.io/helpers/) in the corresponding guide. -## done() Yes, also the [demo project is available on GitHub](https://github.com/DavertMik/codeceptjs-todomvc-puppeteer) diff --git a/docs/quickstart.md b/docs/quickstart.md deleted file mode 100644 index 3ffeb42f0..000000000 --- a/docs/quickstart.md +++ /dev/null @@ -1,212 +0,0 @@ -# QuickStart - -**NodeJS v 8.9** and higher required to start. -CodeceptJS is multi-backend testing framework. It can execute tests using different libraries like webdriverio, Puppeteer, Protractor, etc. - -* In this guide we will use [Google Chrome **Puppeteer**](https://github.com/GoogleChrome/puppeteer) as a driver for browsers. This allows us to start in a minutes with no extra tools installed. -* If you are familiar with Selenium, you can choose classical [**Selenium WebDriver** setup](#using-selenium-webdriver). -* Also, look at [complete installation reference](https://codecept.io/installation/). - - -## Using Puppeteer - - - - - -1) Install CodeceptJS with Puppeteer - -``` -npm install codeceptjs puppeteer --save-dev -``` - -(due to [this issue in Puppeteer](https://github.com/GoogleChrome/puppeteer/issues/375), we install it locally) - - -2) Initialize CodeceptJS in current directory by running: - -```sh -./node_modules/.bin/codeceptjs init -``` - -(use `node node_modules/.bin/codeceptjs` on Windows) - -3) Answer questions. Agree on defaults, when asked to select helpers choose **Puppeteer**. - -```sh -? What helpers do you want to use? - ◯ WebDriverIO - ◯ Protractor -❯◉ Puppeteer - ◯ Appium - ◯ Nightmare - ◯ FileSystem -``` - -4) Create First Test. - -```bash -./node_modules/.bin/codeceptjs gt -``` - -5) Enter a test name. Open a generated file in your favorite JavaScript editor. - -```js -Feature('My First Test'); - -Scenario('test something', (I) => { - -}); -``` - -6) Write a simple scenario - -```js -Feature('My First Test'); - -Scenario('test something', (I) => { - I.amOnPage('https://github.com'); - I.see('GitHub'); -}); -``` - -7) Run a test: - -``` -./node_modules/.bin/codeceptjs run --steps -``` - -The output should be similar to this: - -```bash -My First Test -- - test something - • I am on page "https://github.com" - • I see "GitHub" - ✓ OK -``` - -Puppeteer starts a browser without showing its window. To see the browser, edit `codecept.json` config and set `show: true` for Puppeteer: - -```js -{ - "helpers": { - "Puppeteer": { - "url": "http://localhost", - "show": true, - } - } -} -``` - -Rerun the test to see the browser. - ---- - -### Next: [CodeceptJS with Puppeteer >>>](https://codecept.io/puppeteer/) -### Next: [CodeceptJS Basics >>>](https://codecept.io/basics/) -### Next: [Demo Project](https://github.com/DavertMik/codeceptjs-todomvc-puppeteer) - - ---- - -## Using Selenium WebDriver - -1) Install CodeceptJS with webdriverio library - -``` -[sudo] npm install -g codeceptjs webdriverio -``` - -2) Initialize CodeceptJS in current directory by running: - -```sh -codeceptjs init -``` - -3) Answer questions. Agree on defaults, when asked to select helpers choose **WebDriverIO**. - -```sh -? What helpers do you want to use? -❯◉ WebDriverIO - ◯ Protractor - ◯ Puppeteer - ◯ Appium - ◯ Nightmare - ◯ FileSystem -``` - -4) Create First Test. - -```bash -codeceptjs gt -``` - -5) Enter a test name. Open a generated file in your favorite JavaScript editor. - -```js -Feature('My First Test'); - -Scenario('test something', (I) => { - -}); -``` - -6) Write a simple scenario - -```js -Feature('My First Test'); - -Scenario('test something', (I) => { - I.amOnPage('https://github.com'); - I.see('GitHub'); -}); -``` - -7) Prepare Selenium Server - -To execute tests in Google Chrome browser running Selenium Server with ChromeDriver is required. - -Use [selenium-standalone](https://www.npmjs.com/package/selenium-standalone) from NPM to install and run them: - -```sh -[sudo] npm install -g selenium-standalone -selenium-standalone install -selenium-standalone start -``` - - -8) Run a test: - -``` -codeceptjs run --steps -``` - -If everything is done right, you will see in console: - -```bash -My First Test -- - test something - • I am on page "https://github.com" - • I see "GitHub" - ✓ OK -``` - ---- - -### Next: [CodeceptJS Basics >>>](https://codecept.io/basics/) -### Next: [Acceptance Testing in CodeceptJS >>>](https://codecept.io/acceptance/) - ---- - -## Using Protractor - -[**Follow corresponding guide >>**](https://codecept.io/angular/) - -## Using Appium - -[**Follow corresponding guide >>**](https://codecept.io/mobile/) - -## Using NightmareJS - -[**Follow corresponding guide >>**](https://codecept.io/nightmare/) diff --git a/docs/quickstart/codecept-overview.svg b/docs/quickstart/codecept-overview.svg new file mode 100644 index 000000000..f92a96c42 --- /dev/null +++ b/docs/quickstart/codecept-overview.svg @@ -0,0 +1,9 @@ + + +Test.jsCodeceptJSDriverBrowserWebpageHelper \ No newline at end of file diff --git a/docs/quickstart/github1.png b/docs/quickstart/github1.png new file mode 100644 index 0000000000000000000000000000000000000000..0fe3e68c58c94a975024b4736c216ea33b1d53f5 GIT binary patch literal 97645 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 ZL|rm- + +Video provided by our community member **[@ontytoom](http://github.com/ontytoom)**. + + +## Local Installation + +CodeceptJS can be installed via NPM, together with a suitable driver to connect to the browser: + +```sh +npm install --save-dev codeceptjs webdriverio +# or +npm install --save-dev codeceptjs protractor +# or +npm install --save-dev codeceptjs puppeteer +# or +npm install --save-dev codeceptjs nightmare +``` + +then it can be started as + +```sh +./node_modules/.bin/codeceptjs +``` + +Local installations are easier to reproduce on other machines. This is useful on CI/Build servers that should install all the needed tools automatically. + +## WebDriver + +WebDriver based helpers like WebDriverIO, Protractor, Selenium WebDriver will require [Selenium Server](http://codecept.io/helpers/WebDriverIO/#selenium-installation) or [PhantomJS](http://codecept.io/helpers/WebDriverIO/#phantomjs-installation) installed. They will also require ChromeDriver or GeckoDriver to run corresponding browsers. + +We recommend to install them using an NPM package: + +[Selenium Standalone](https://www.npmjs.com/package/selenium-standalone) will install and run Selenium, ChromeDriver, Firefox Driver with one package. + +```sh +npm install --save-dev codeceptjs webdriverio +[sudo] npm install -g selenium-standalone +selenium-standalone install +selenium-standalone start +``` + +This installs Selenium globally, which makes the `selenium-standalone` command available in the PATH. + +Note that Selenium is [Java](https://www.java.com/en/download/) based, so you may need to install or update that first. diff --git a/docs/quickstart/nightmare.md b/docs/quickstart/nightmare.md new file mode 100644 index 000000000..567617201 --- /dev/null +++ b/docs/quickstart/nightmare.md @@ -0,0 +1,115 @@ +# Nightmare Quickstart + +[NightmareJS](http://www.nightmarejs.org) is a modern Electron based testing framework which allows to execute tests in headless mode as well as in window mode for debug purposes. +Nightmare is in active development and has nice API for writing acceptance tests. +Unfortunately, as all other JavaScript testing frameworks it has its own very custom API. +What if you choose it for a project and suddenly you realize that you need something more powerful, like Selenium? +Yes, that might be a problem if you are not using CodeceptJS. +The one idea behind CodeceptJS is to unify different testing backends under one API, so you could easily write tests the same way no matter what engines you use: webdriverio, Protractor, or Nightmare. + +## Install Codecept and Nightmare + +To start you need CodeceptJS and Nightmare installed. + +```bash +npm install -g codeceptjs nightmare +``` + +## Setup a test + +And a basic Codecept test project initialized + +```sh +codeceptjs init +``` + +You will be asked for a Helper to use, you should select Nightmare and provide the url of a website you are testing. +We will test `https://github.com` + +Answer the questions. Agree on defaults, when asked to select helpers choose **Nightmare**. + +```sh +? What helpers do you want to use? + ◯ WebDriverIO + ◯ Protractor + ◯ Puppeteer + ◯ Appium +❯◉ Nightmare + ◯ FileSystem +``` + +Create First Test. The `gt` command *Generates a Test* file for us. and adds it to the Codecept configuration file. + +```bash +./node_modules/.bin/codeceptjs gt +``` + +Enter a test name. Open a generated file in your favorite JavaScript editor. + +```js +Feature('My First Test'); + +Scenario('test something', (I) => { + +}); +``` + +Write a simple scenario + +```js +Feature('My First Test'); + +Scenario('test something', (I) => { + I.amOnPage('https://github.com'); + I.see('GitHub'); +}); +``` + +## Run the test + +``` +./node_modules/.bin/codeceptjs run --steps +``` + +The output should be similar to this: + +```bash +My First Test -- + test something + • I am on page "https://github.com" + • I see "GitHub" + ✓ OK +``` + + +## Configuring Nightmare + +Enable `Nightmare` helper in `codecept.json` config: + +```js +{ // .. + "helpers": { + "Nightmare": { + "url": "http://localhost", + "show": false, + "restart": false + } + } + // .. +} +``` + +Turn on the `show` option if you want to follow test progress in a window. This is very useful for debugging. +All other options can be taken from [NightmareJS API](https://github.com/segmentio/nightmare#api). + +Turn off the `restart` option if you want to run your suite in a single browser instance. + +Option `waitForAction` defines how long to wait after a click, doubleClick or pressKey action is performed. +Test execution may happen much faster than the response is rendered, so make sure you set a proper delay value. +By default CodeceptJS waits for 500ms. + + +## Additional Links + +* [Nightmare Tutorial](http://codenroll.it/acceptance-testing-with-codecept-js/) by jploskonka. + diff --git a/docs/quickstart/protractor.md b/docs/quickstart/protractor.md new file mode 100644 index 000000000..f99d541bd --- /dev/null +++ b/docs/quickstart/protractor.md @@ -0,0 +1,130 @@ +# Protractor Quickstart + +## Introduction + +[Protractor](http://www.protractortest.org/#/) is an official tool for testing AngularJS applications. +CodeceptJS should not be considered as alternative to Protractor but a testing framework utilizing this powerful library. + +There is no magic in testing of AngularJS application in CodeceptJS. +You just execute regular Protractor commands, packed in a simple high-level API. + +## Setting up CodeceptJS with Protractor + +To start using CodeceptJS you will need to install it via NPM and initialize it in directory with tests. + +```bash +[sudo] npm install -g codeceptjs +npm install --save-dev protractor +``` + +Protractor uses webdriver to talk to the browser, so you need to install Selenium as well. + +```bash +[sudo] npm install -g selenium-standalone +selenium-standalone install +selenium-standalone start +``` + +## Define Test Project + +```bash +codeceptjs init + + Welcome to CodeceptJS initialization tool + It will prepare and configure a test environment for you + +Installing +? Where are your tests located? ./*_test.js + +? What helpers do you want to use? + ◯ WebDriverIO +❯◉ Protractor + ◯ Puppeteer + ◯ Appium + ◯ Nightmare + ◯ FileSystem + +? What helpers do you want to use? Protractor +Configure helpers... +? [Protractor] Base url of site to be tested http://localhost +? [Protractor] Protractor driver (local, direct, session, hosted, sauce, browserstack) hosted +? [Protractor] Browser in which testing will be performed chrome +? [Protractor] Root element of AngularJS application body +``` + +You will be asked questions about initial configuration, make sure you select Protractor helper. +If you didn't have Protractor library it **will be installed**. + +Please use `http://todomvc.com/examples/angularjs/` as a url for Protractor helper. + +The following config is created in `codecept.json` file: + +```json +{ + "tests": "./*_test.js", + "output": "./output", + "helpers": { + "Protractor": { + "url": "https://todomvc.com/examples/angularjs/", + "driver": "hosted", + "browser": "chrome", + "rootElement": "body" + } + }, + "include": { + "I": "./steps_file.js" + }, + "name": "todoangular" +} +``` + +First test can be generated with `gt` (Generate Test) command: + +```bash +codeceptjs gt +``` + +After that you can start writing your first CodeceptJS/Angular tests. +Please look into the reference of [Protractor helper](../helpers/Protractor.md) for all available actions. +You can also run `list` command to see methods of I: + +```bash +codeceptjs list +``` + +## Writing First Test + +At first a page should be opened to proceed, we use `amOnPage` command for that. As we already specified full URL to TodoMVC app, +we can pass relative path into it instead of absolute url: + +In CodeceptJS assertion commands have `see` or `dontSee` prefix: + +```js +Feature('Todo MVC'); + +Scenario('create todo item', (I) => { + I.amOnPage('/'); + I.dontSeeElement('#todo-count'); + I.see('todos') +}); +``` + +## Run the test + +A test can be executed with `run` command, we recommend to use `--steps` options to follow step-by-step execution: + +```sh +$ codeceptjs run --steps + +CodeceptJS 1.2.0 +Using the selenium server at http://localhost:4444/wd/hub + +TodoMvc -- + create todo item + • I am on page "/" + • I dont see element "#todo-count" +``` + +--- + +### Next: [CodeceptJS Basics >>>](../basics.md) diff --git a/docs/quickstart/puppeteer.md b/docs/quickstart/puppeteer.md new file mode 100644 index 000000000..aaaa7e782 --- /dev/null +++ b/docs/quickstart/puppeteer.md @@ -0,0 +1,157 @@ +# Puppeteer Quickstart + + +## Install CodeceptJS with Puppeteer + +```sh +npm install codeceptjs puppeteer --save-dev + +> puppeteer@1.10.0 install C:\\Temp\\c1\\node_modules\\puppeteer +> node install.js + +Downloading Chromium r599821 - 135.9 Mb [====================] 98% +``` + +(due to [this issue in Puppeteer](https://github.com/GoogleChrome/puppeteer/issues/375), we install it locally) + +The Puppeteer package includes a full chromium browser that runs independent of your standard Chrome browser. This means your normal browser has no effect on your test runs, which is good. Your tests should be isolated from the local environment. + +## Define test project + +Initialize CodeceptJS in current directory by running: + +```sh +./node_modules/.bin/codeceptjs init +``` + +(use `node node_modules/.bin/codeceptjs` on Windows) + +Answer questions. Agree on defaults, when asked to select helpers choose **Puppeteer**. +We will test `https://github.com` so enter that when asked for a URL + +```sh + + Welcome to CodeceptJS initialization tool + It will prepare and configure a test environment for you + +Installing +? Where are your tests located? ./*_test.js + +? What helpers do you want to use? + ◯ WebDriverIO + ◯ Protractor +❯◉ Puppeteer + ◯ Appium + ◯ Nightmare + ◯ FileSystem + +? What helpers do you want to use? Puppeteer +? Where should logs, screenshots, and reports to be stored? ./output +? Would you like to extend I object with custom steps? Yes +? Do you want to choose localization for tests? English (no localization) +? Where would you like to place custom steps? ./steps_file.js +Configure helpers... +? [Puppeteer] Base url of site to be tested https://github.com +Steps file created at ./steps_file.js +Config created at ./codecept.json +Directory for temporary output files created at `_output` +``` + +The `codecept.json` configuration file stores our choices. It looks like this: + +```json +{ + "tests": "./*_test.js", + "timeout": 10000, + "output": "./output", + "helpers": { + "Puppeteer": { + "url": "https://github.com" + } + }, + "include": { + "I": "./steps_file.js" + }, + "bootstrap": false, + "mocha": {}, + "name": "dirname" +} +``` + +## Create First Test + +Use the command GT (for *Generate Test*) to create our first test: + +```bash +./node_modules/.bin/codeceptjs gt + +Creating a new test... +---------------------- +? Filename of a test First +? Feature which is being tested My First Test +Test for First was created in ./First_test.js +``` + +Enter a test name. Open the generated file in your favorite JavaScript editor. + +```js +Feature('My First Test'); + +Scenario('test something', (I) => { + +}); +``` + +Write a simple scenario + +```js +Feature('My First Test'); + +Scenario('test something', (I) => { + I.amOnPage('/'); + I.see('GitHub'); + I.dontSee('Microsoft'); +}); +``` + +First we need to go to a page; we use `amOnPage` command for that. As we already specified full URL to TodoMVC app, +we can pass relative path into it instead of absolute url. + +In CodeceptJS assertion commands have `see` or `dontSee` prefix. + +## Run test + +``` +./node_modules/.bin/codeceptjs run --steps +``` +The `--steps` flag tells Codecept to list out the steps as they are completed. +The output should be similar to this: + +```bash +My First Test -- + test something + • I am on page "https://github.com" + • I see "GitHub" + ✓ OK +``` + +Puppeteer starts a browser without showing its window. To see the browser, edit `codecept.json` config and set `show: true` for Puppeteer: + +```js +{ + "helpers": { + "Puppeteer": { + "url": "https://github.com", + "show": true + } + } +} +``` + +Rerun the test to see the browser performing the test actions. + +--- + +### Next: [CodeceptJS Basics >>>](../basics.md) + +### Next: [Demo Project](https://github.com/DavertMik/codeceptjs-todomvc-puppeteer) diff --git a/docs/quickstart/quickstart.md b/docs/quickstart/quickstart.md new file mode 100644 index 000000000..e1350a03e --- /dev/null +++ b/docs/quickstart/quickstart.md @@ -0,0 +1,49 @@ +# Selenium QuickStart + +CodeceptJS is multi-backend testing framework. It can execute tests using different libraries like webdriverio, Puppeteer, Protractor, etc. Note that the libraries need to be installed separately - they are not included in CodeceptJS. + +CodeceptJS is an acceptance testing framework. In diversified world of JavaScript testing libraries it aims to create a unified high level API for end-to-end testing, powered by different backends. +CodeceptJS allows you to write a test and switch in config execution drivers: will it be *wedriverio*, *puppeteer*, or *protractor* depends on you. +This way you aren't be bound to implementation, and your acceptance tests will work no matter of framework running them. + +![](codecept-overview.svg) + +CodeceptJS contains **helpers** that talk to **drivers**. The drivers control a **browser**, usually in headless mode - which means that the browser window is not visible while the test is running. + +You need to provide +* a test script, and +* usually a web page to test. + +CodeceptJS takes care of connecting your test script to the browser through a helper and its corresponding driver. + + +## NodeJS v8.9 + +**NodeJS v 8.9** and higher required to start. Using an older version of NodeJS will result in errors. +Check your Node version on the command-line + +```sh +> node --version +v8.11.1 +``` + +## Quickstarts + +There are separate Quickstarts for all the major drivers: + +* [Puppeteer Quickstart](puppeteer.md) +* [Selenium WebDriver Quickstart](selenium.md) +* [Protractor Quickstart](protractor.md) +* [Nightmare Quickstart](nightmare.md) + +All of the quickstarts show you how to test GitHub. + + + +## CodeceptJS in 2 minutes + + + +--- + +### Next: [Puppeteer Quickstart >>>](puppeteer.md) diff --git a/docs/quickstart/selenium.md b/docs/quickstart/selenium.md new file mode 100644 index 000000000..750cee02f --- /dev/null +++ b/docs/quickstart/selenium.md @@ -0,0 +1,147 @@ +# Quickstart with Selenium WebDriver + +Selenium is the original browser-driver, and it provides a standard interface to many different browsers. It is popular for cross-browser testing, and for testing via cloud-based services like SauceLabs. + +## Install CodeceptJS and Selenium Server + +Install CodeceptJS with webdriverio library globally. + +``` +[sudo] npm install -g codeceptjs webdriverio +``` + +## Install Selenium Server. + +To execute tests in Google Chrome browser running Selenium Server with ChromeDriver is required. + +Use [selenium-standalone](https://www.npmjs.com/package/selenium-standalone) from NPM to install and run them, then install and start the Selenium server. +The Selenium server listens for commands from Codecept, and controls the browser for us. + +```sh +[sudo] npm install -g selenium-standalone +selenium-standalone install +``` + +## Setup a test + +Initialize CodeceptJS in current directory by running: + +```sh +codeceptjs init +``` + +Answer questions. Agree on defaults, when asked to select helpers choose **WebDriverIO**. +We will test `https://github.com` so enter that when asked for a URL + +```sh + Welcome to CodeceptJS initialization tool + It will prepare and configure a test environment for you + +Installing +? Where are your tests located? ./*_test.js + +? What helpers do you want to use? +❯◉ WebDriverIO + ◯ Protractor + ◯ Puppeteer + ◯ Appium + ◯ Nightmare + ◯ FileSystem + +? What helpers do you want to use? WebDriverIO +? Where should logs, screenshots, and reports to be stored? ./output +? Would you like to extend I object with custom steps? Yes +? Do you want to choose localization for tests? English (no localization) +? Where would you like to place custom steps? ./steps_file.js +Configure helpers... +? [WebDriverIO] Base url of site to be tested https://github.com +? [WebDriverIO] Browser in which testing will be performed chrome +``` + +The `codecept.json` configuration file stores our choices. It looks like this: + +```json +{ + "tests": "./*_test.js", + "output": "./output", + "helpers": { + "WebDriverIO": { + "url": "https://github.com", + "browser": "chrome" + } + }, + "include": { + "I": "./steps_file.js" + }, + "name": "dirname" +} +``` + +## Create First Test + +The `gt` command *Generates a Test* file for us. and adds it to the Codecept configuration file. + +```bash +codeceptjs gt + +Creating a new test... +---------------------- +? Filename of a test First +? Feature which is being tested My First Test +Test for First was created in ./First_test.js +``` + +Enter a test name. Open the generated file in your favorite JavaScript editor. + +```js +Feature('My First Test'); + +Scenario('test something', (I) => { + +}); +``` + +Write a simple scenario + +```js +Feature('My First Test'); + +Scenario('test something', (I) => { + I.amOnPage('https://github.com'); + I.see('GitHub'); +}); +``` + +## Start Selenium + +Before we can run the tests, we need to make sure that the Selenium server is running. + +```sh +selenium-standalone start +``` + +The selenium server should start up, and be ready to accept commands. + +## Run tests + +``` +codeceptjs run --steps +``` + +If everything is done right, you will see in console: + +```bash +My First Test -- + test something + • I am on page "https://github.com" + • I see "GitHub" + ✓ OK +``` + +You should also see commands fly past on the selenium server log. + +--- + +### Next: [CodeceptJS Basics >>>](../basics.md) + +--- diff --git a/docs/what-is-helper.md b/docs/what-is-helper.md new file mode 100644 index 000000000..212c284a7 --- /dev/null +++ b/docs/what-is-helper.md @@ -0,0 +1,73 @@ +# What is a Helper? + +Helpers is a core concept of CodeceptJS. A Helper is a wrapper around a driver for talking to browsers, providing unified interface around them. + +So we have a **Puppeteer helper** which talks to the *Puppeteer driver*, which talks to a Chrome browser. + +The **Nightmare helper** talks to the *Nightmare driver*, which talks to an Electron 'browser'. + +The **Webdriverio helper** which talks the webdriver protocol to the *Webdriverio driver*, which talks to a Selenium server, which talks to a Firefox, Edge, or Chrome browser. + +All these helpers implement (nearly) the same API. + +The **Puppeteer helper** implements `amOnPage(url)` to navigate to a URL. +The **Nightmare helper** and the **Webdriverio helper** also implement the `amOnPage(url)` function. + +Methods of Helper class will be available in tests in `I` object. This abstracts test scenarios from the implementation and allows easy switching between backends. + +## Configuration + +Helpers are defined and configured in the `codecept.json` file. + +```js +{ "helpers": { + "Nightmare": { + "url": "http://localhost", + "show": false +} } } +``` + +You should only have one primary helper active at one time. Trying to configure both Puppeteer and Nightmare helpers at the same time won't work. There is a special [multi](multi.md) mode for running the same tests in multiple browsers. + +## Custom Helpers + +You can make your own helpers. These helpers are for adding your own custom functions, or for exposing a bit more of the underlying driver functionality without modifying CodeceptJS directly. + +These helpers get added into the config file alongside the primary helper. + +```js +{ // .. + "helpers": { + "Nightmare": { + "url": "http://localhost", + "restart": false + }, + "MyHelper": { } + } + // .. +} +``` + +## Non-browser Helpers + +The REST and Filesystem helpers are assistants. They do not pretend to be browsers, but add their own special APIs to the `I` object to make tests easier to write. + +For example, the REST helper lets you write a test that can call a WebAPI to create a record. + +These would also be used alongside the main helper: + +```js +{ // .. + "helpers": { + "Nightmare": { + "url": "http://localhost", + "restart": false + }, + "MyHelper": { }, + "REST": { + "endpoint": "http://localhost/api/" + } + } + // .. +} +``` diff --git a/mkdocs.yml b/mkdocs.yml index ce8dbc980..b7f108c6d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,31 +1,59 @@ site_name: CodeceptJS +theme: + name: mkdocs theme_dir: layout repo_url: https://github.com/codeception/codeceptjs/ pages: - Index: 'index.md' -- Quickstart: 'quickstart.md' -- Guides: - - 'Installation': 'installation.md' +- Quickstart: + - 'Quickstart': 'quickstart/quickstart.md' + - 'Installation': 'quickstart/installation.md' + - 'Puppeteer': 'quickstart/puppeteer.md' + - 'WebDriverIO': 'quickstart/selenium.md' + - 'Protractor': 'quickstart/protractor.md' + - 'Nightmare': 'quickstart/nightmare.md' +- Concepts: - 'Basics': 'basics.md' - 'Acceptance Testing': 'acceptance.md' - - 'AngularJS Testing': 'angular.md' - - 'Nightmare Testing': 'nightmare.md' + - 'BDD Testing': 'bdd.md' + - 'Test Lifecycle': 'lifecycle.md' + - 'Locators': 'locators.md' + - 'Debugging': 'debugging.md' - 'Helpers': 'helpers.md' - 'Page Objects': 'pageobjects.md' - - 'Hooks': 'hooks.md' + - 'Data Driven Tests': 'datadriven.md' +- Guides: + - 'AngularJS Testing': 'angular.md' + - 'Mobile Testing': 'mobile.md' + - 'Nightmare Testing': 'nightmare.md' + - 'Puppeteer Testing': 'puppeteer.md' + - 'Data Management': 'data.md' + - 'Frames': 'frames.md' + - 'Drag and Drop': 'drag-drop.md' + - 'Multiple Testing': 'multi.md' - 'Advanced Usage': 'advanced.md' - Helpers: + - 'What is a Helper?': 'what-is-helper.md' - 'WebDriverIO': 'helpers/WebDriverIO.md' - 'Protractor': 'helpers/Protractor.md' - 'SeleniumWebdriver': 'helpers/SeleniumWebdriver.md' + - 'Puppeteer': 'helpers/Puppeteer.md' - 'Nightmare': 'helpers/Nightmare.md' + - 'Appium': 'helpers/Appium.md' + - 'REST': 'helpers/REST.md' + - 'ApiDataFactory': 'helpers/ApiDataFactory.md' - 'FileSystem': 'helpers/FileSystem.md' + - 'Reports': 'helpers/Mochawesome.md' - Reference: + - 'Installation': 'installation.md' - 'Commands': 'commands.md' - 'Configuration': 'configuration.md' - 'Reports': 'reports.md' - 'Translation': 'translation.md' + - 'Plugins': 'plugins.md' - 'Docker': 'docker.md' + - 'Hooks': 'hooks.md' + - 'API': 'api.md' - Releases: 'changelog.md' copyright: Created by CodeceptJS Team google_analytics: ['UA-30075781-3','auto'] \ No newline at end of file From 1caa95c0b482cb6507fc3a17fa53a0bd64056937 Mon Sep 17 00:00:00 2001 From: Christian Mogensen Date: Fri, 28 Dec 2018 21:43:07 +0100 Subject: [PATCH 2/3] Quickstart headings --- docs/quickstart/quickstart.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/docs/quickstart/quickstart.md b/docs/quickstart/quickstart.md index e1350a03e..f8926267f 100644 --- a/docs/quickstart/quickstart.md +++ b/docs/quickstart/quickstart.md @@ -1,18 +1,25 @@ -# Selenium QuickStart +# QuickStart -CodeceptJS is multi-backend testing framework. It can execute tests using different libraries like webdriverio, Puppeteer, Protractor, etc. Note that the libraries need to be installed separately - they are not included in CodeceptJS. +CodeceptJS is multi-backend testing framework. It can execute tests using different libraries like webdriverio, Puppeteer, Protractor, etc. Note that these libraries need to be installed separately - they are not included in the CodeceptJS package. + +CodeceptJS is an acceptance testing framework. In the diversified world of JavaScript testing libraries it aims to create a unified high level API for end-to-end testing, powered by different backends. -CodeceptJS is an acceptance testing framework. In diversified world of JavaScript testing libraries it aims to create a unified high level API for end-to-end testing, powered by different backends. CodeceptJS allows you to write a test and switch in config execution drivers: will it be *wedriverio*, *puppeteer*, or *protractor* depends on you. -This way you aren't be bound to implementation, and your acceptance tests will work no matter of framework running them. +This way you aren't be bound to implementation, and your acceptance tests will work no matter which framework is running them. ![](codecept-overview.svg) CodeceptJS contains **helpers** that talk to **drivers**. The drivers control a **browser**, usually in headless mode - which means that the browser window is not visible while the test is running. +You need to install +* Node and Node Package Manager (NPM) +* CodeceptJS +* A browser +* A suitable driver (webdriver, puppeteer, protractor, nightmare) + You need to provide -* a test script, and -* usually a web page to test. +* a web page to test +* a test script CodeceptJS takes care of connecting your test script to the browser through a helper and its corresponding driver. From 1b391a6f123f3e49592f6d7649ccc8f0ce34d89b Mon Sep 17 00:00:00 2001 From: Christian Mogensen Date: Sat, 29 Dec 2018 00:34:49 +0100 Subject: [PATCH 3/3] Webdriverio to Webdriver helper --- docs/data.md | 2 +- docs/frames.md | 2 +- docs/multi.md | 2 +- docs/quickstart/installation.md | 2 +- docs/quickstart/nightmare.md | 2 +- docs/quickstart/protractor.md | 2 +- docs/quickstart/puppeteer.md | 2 +- docs/quickstart/quickstart.md | 2 +- docs/quickstart/selenium.md | 28 ++++++++++++++++++++++------ docs/what-is-helper.md | 6 +++--- mkdocs.yml | 4 ++-- 11 files changed, 35 insertions(+), 19 deletions(-) diff --git a/docs/data.md b/docs/data.md index 942cb1be6..357a99f36 100644 --- a/docs/data.md +++ b/docs/data.md @@ -40,7 +40,7 @@ See this sample config: } ``` -Note that the WebDriverIO helper is still there, and it is handling all the web-page related commands like `I.click` and so on. +Note that the `WebDriver` helper is still there, and it is handling all the web-page related commands like `I.click` and so on. The `REST` helper provides basic methods to send requests to application: diff --git a/docs/frames.md b/docs/frames.md index 5f1913676..2c07544b9 100644 --- a/docs/frames.md +++ b/docs/frames.md @@ -16,7 +16,7 @@ within({frame: "#editor"}, () => { }); ``` -Nested IFrames can be set by passing array *(WebDriverIO, Nightmare & Puppeteer only)*: +Nested IFrames can be set by passing array *(WebDriver, Nightmare & Puppeteer only)*: ```js within({frame: [".content", "#editor"]}, () => { diff --git a/docs/multi.md b/docs/multi.md index 9e424cffa..8ebacfeb6 100644 --- a/docs/multi.md +++ b/docs/multi.md @@ -23,7 +23,7 @@ Create `multiple` section in configuration file, and fill it with run suites. Ea "smoke": { "browsers": [ "firefox", - // replace any config values from WebDriverIO helper + // replace any config values from WebDriver helper { "browser": "chrome", "windowSize": "maximize", diff --git a/docs/quickstart/installation.md b/docs/quickstart/installation.md index 30ba19c61..9c9316bf4 100644 --- a/docs/quickstart/installation.md +++ b/docs/quickstart/installation.md @@ -32,7 +32,7 @@ Local installations are easier to reproduce on other machines. This is useful on ## WebDriver -WebDriver based helpers like WebDriverIO, Protractor, Selenium WebDriver will require [Selenium Server](http://codecept.io/helpers/WebDriverIO/#selenium-installation) or [PhantomJS](http://codecept.io/helpers/WebDriverIO/#phantomjs-installation) installed. They will also require ChromeDriver or GeckoDriver to run corresponding browsers. +WebDriver based helpers like WebDriver, Protractor, Selenium WebDriver will require [Selenium Server](http://codecept.io/helpers/WebDriverIO/#selenium-installation) or [PhantomJS](http://codecept.io/helpers/WebDriverIO/#phantomjs-installation) installed. They will also require ChromeDriver or GeckoDriver to run corresponding browsers. We recommend to install them using an NPM package: diff --git a/docs/quickstart/nightmare.md b/docs/quickstart/nightmare.md index 567617201..6ec2da391 100644 --- a/docs/quickstart/nightmare.md +++ b/docs/quickstart/nightmare.md @@ -30,7 +30,7 @@ Answer the questions. Agree on defaults, when asked to select helpers choose **N ```sh ? What helpers do you want to use? - ◯ WebDriverIO + ◯ WebDriver ◯ Protractor ◯ Puppeteer ◯ Appium diff --git a/docs/quickstart/protractor.md b/docs/quickstart/protractor.md index f99d541bd..b39f598bd 100644 --- a/docs/quickstart/protractor.md +++ b/docs/quickstart/protractor.md @@ -37,7 +37,7 @@ Installing ? Where are your tests located? ./*_test.js ? What helpers do you want to use? - ◯ WebDriverIO + ◯ WebDriver ❯◉ Protractor ◯ Puppeteer ◯ Appium diff --git a/docs/quickstart/puppeteer.md b/docs/quickstart/puppeteer.md index aaaa7e782..157861984 100644 --- a/docs/quickstart/puppeteer.md +++ b/docs/quickstart/puppeteer.md @@ -38,7 +38,7 @@ Installing ? Where are your tests located? ./*_test.js ? What helpers do you want to use? - ◯ WebDriverIO + ◯ WebDriver ◯ Protractor ❯◉ Puppeteer ◯ Appium diff --git a/docs/quickstart/quickstart.md b/docs/quickstart/quickstart.md index 2d4e50f31..0aae59afa 100644 --- a/docs/quickstart/quickstart.md +++ b/docs/quickstart/quickstart.md @@ -1,4 +1,4 @@ -# QuickStart +# Overview CodeceptJS is multi-backend testing framework. It can execute tests using different libraries like webdriverio, Puppeteer, Protractor, etc. Note that these libraries need to be installed separately - they are not included in the CodeceptJS package. diff --git a/docs/quickstart/selenium.md b/docs/quickstart/selenium.md index 750cee02f..156b32f4b 100644 --- a/docs/quickstart/selenium.md +++ b/docs/quickstart/selenium.md @@ -30,7 +30,7 @@ Initialize CodeceptJS in current directory by running: codeceptjs init ``` -Answer questions. Agree on defaults, when asked to select helpers choose **WebDriverIO**. +Answer questions. Agree on defaults, when asked to select helpers choose **WebDriver**. We will test `https://github.com` so enter that when asked for a URL ```sh @@ -41,21 +41,21 @@ Installing ? Where are your tests located? ./*_test.js ? What helpers do you want to use? -❯◉ WebDriverIO +❯◉ WebDriver ◯ Protractor ◯ Puppeteer ◯ Appium ◯ Nightmare ◯ FileSystem -? What helpers do you want to use? WebDriverIO +? What helpers do you want to use? WebDriver ? Where should logs, screenshots, and reports to be stored? ./output ? Would you like to extend I object with custom steps? Yes ? Do you want to choose localization for tests? English (no localization) ? Where would you like to place custom steps? ./steps_file.js Configure helpers... -? [WebDriverIO] Base url of site to be tested https://github.com -? [WebDriverIO] Browser in which testing will be performed chrome +? [WebDriver] Base url of site to be tested https://github.com +? [WebDriver] Browser in which testing will be performed chrome ``` The `codecept.json` configuration file stores our choices. It looks like this: @@ -65,7 +65,7 @@ The `codecept.json` configuration file stores our choices. It looks like this: "tests": "./*_test.js", "output": "./output", "helpers": { - "WebDriverIO": { + "WebDriver": { "url": "https://github.com", "browser": "chrome" } @@ -140,6 +140,22 @@ My First Test -- You should also see commands fly past on the selenium server log. +``` +00:12:44.758 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.0, revision: 2ecb7d9a +00:12:44.890 INFO [GridLauncherV3.lambda$buildLaunchers$3] - Launching a standalone Selenium Server on port 4444 +00:12:45.843 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444 +Selenium started +00:13:41.097 INFO [ActiveSessionFactory.apply] - Capabilities are: { + "browserName": "chrome" +} +00:13:41.100 INFO [ActiveSessionFactory.lambda$apply$11] - Matched factory org.openqa.selenium.grid.session.remote.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService) +Starting ChromeDriver 2.43.600210 (68dcf5eebde37173d4027fa8635e332711d2874a) on port 48064 +Only local connections are allowed. +00:13:45.642 INFO [ProtocolHandshake.createSession] - Detected dialect: OSS +00:13:46.097 INFO [RemoteSession$Factory.lambda$performHandshake$0] - Started new session b49e851599110caac64391de22a1183a (org.openqa.selenium.chrome.ChromeDriverService) +00:13:50.870 INFO [ActiveSessions$1.onStop] - Removing session b49e851599110caac64391de22a1183a (org.openqa.selenium.chrome.ChromeDriverService) +``` + --- ### Next: [CodeceptJS Basics >>>](../basics.md) diff --git a/docs/what-is-helper.md b/docs/what-is-helper.md index 212c284a7..0407d01bc 100644 --- a/docs/what-is-helper.md +++ b/docs/what-is-helper.md @@ -6,12 +6,12 @@ So we have a **Puppeteer helper** which talks to the *Puppeteer driver*, which t The **Nightmare helper** talks to the *Nightmare driver*, which talks to an Electron 'browser'. -The **Webdriverio helper** which talks the webdriver protocol to the *Webdriverio driver*, which talks to a Selenium server, which talks to a Firefox, Edge, or Chrome browser. +The **Webdriver helper** which talks the webdriver protocol to the *Webdriverio driver*, which talks to a Selenium server, which talks to a Firefox, Edge, or Chrome browser. All these helpers implement (nearly) the same API. -The **Puppeteer helper** implements `amOnPage(url)` to navigate to a URL. -The **Nightmare helper** and the **Webdriverio helper** also implement the `amOnPage(url)` function. +* The **Puppeteer helper** implements `amOnPage(url)` to navigate to a URL. +* The **Nightmare helper** and the **Webdriver helper** also implement the `amOnPage(url)` function. Methods of Helper class will be available in tests in `I` object. This abstracts test scenarios from the implementation and allows easy switching between backends. diff --git a/mkdocs.yml b/mkdocs.yml index 1e60bfdb8..a45fb5123 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -6,7 +6,7 @@ repo_url: https://github.com/codeception/codeceptjs/ pages: - Index: 'index.md' - Quickstart: - - 'Quickstart': 'quickstart/quickstart.md' + - 'Overview': 'quickstart/quickstart.md' - 'Installation': 'quickstart/installation.md' - 'Puppeteer': 'quickstart/puppeteer.md' - 'WebDriver': 'quickstart/selenium.md' @@ -36,7 +36,7 @@ pages: - 'Advanced Usage': 'advanced.md' - Helpers: - 'What is a Helper?': 'what-is-helper.md' - - 'WebDriver': 'helpers/WebDriverIO.md' + - 'WebDriver': 'helpers/WebDriver.md' - 'Protractor': 'helpers/Protractor.md' - 'SeleniumWebdriver': 'helpers/SeleniumWebdriver.md' - 'Puppeteer': 'helpers/Puppeteer.md'