codeceptjs
Version:
Modern Era Acceptance Testing Framework for NodeJS
794 lines (641 loc) • 85.7 kB
Markdown
---
id: changelog
title: Releases
---
## 2.3.6
* Create better Typescript definition file through JSDoc. By **[lemnis](https://github.com/lemnis)**
* `run-workers` now can use glob pattern. By **[Ilrilan](https://github.com/Ilrilan)**
```js
// Example:
exports.config = {
tests: '{./workers/base_test.workers.js,./workers/test_grep.workers.js}',
}
```
* Added new command `npx codeceptjs info` which print information about your environment and CodeceptJS configs. By **[jamesgeorge007](https://github.com/jamesgeorge007)**
* Fixed some typos in documantation. By **[pablopaul](https://github.com/pablopaul)** **[atomicpages](https://github.com/atomicpages)** **[EricTendian](https://github.com/EricTendian)**
* Added PULL_REQUEST template.
* [Puppeteer][WebDriver] Added `waitForClickable` for waiting clickable element on page.
* **[TestCafe]** Added support for remote connection. By **[jvdieten](https://github.com/jvdieten)**
* **[Puppeteer]** Fixed `waitForText` XPath context now works correctly. By **[Heavik](https://github.com/Heavik)**
* **[TestCafe]** Fixed `clearField` clear field now awaits TestCafe's promise. By **[orihomie](https://github.com/orihomie)**
* **[Puppeteer]** Fixed fails when executing localStorage on services pages. See [#2026](https://github.com/Codeception/CodeceptJS/issues/2026)
* Fixed empty tags in test name. See [#2038](https://github.com/Codeception/CodeceptJS/issues/2038)
## 2.3.5
* Set "parse-function" dependency to "5.2.11" to avoid further installation errors.
## 2.3.4
* Fixed installation error "Cannot find module '@babel/runtime/helpers/interopRequireDefault'". The issue came from `parse-function` package. Fixed by **[pablopaul](https://github.com/pablopaul)**.
* **[Puppeteer]** Fixed switching to iframe without an ID by **[johnyb](https://github.com/johnyb)**. See [#1974](https://github.com/Codeception/CodeceptJS/issues/1974)
* Added `--profile` option to `run-workers` by **[orihomie](https://github.com/orihomie)**
* Added a tag definition to `FeatureConfig` and `ScenarioConfig` by **[sseliverstov](https://github.com/sseliverstov)**
## 2.3.3
* **[customLocator plugin](#customlocator) introduced**. Adds a locator strategy for special test attributes on elements.
```js
// when data-test-id is a special test attribute
// enable and configure plugin to replace this
I.click({ css: '[data-test-id=register_button]');
// with this
I.click('$register_button');
```
* [Puppeteer][WebDriver] `pressKey` improvements by **[martomo](https://github.com/martomo)**:
Changed pressKey method to resolve issues and extend functionality.
* Did not properly recognize 'Meta' (or 'Command') as modifier key.
* Right modifier keys did not work in WebDriver using JsonWireProtocol.
* 'Shift' + <key> combination would not reflect actual keyboard behavior.
* Respect sequence with multiple modifier keys passed to pressKey.
* Added support to automatic change operation modifier key based on operating system.
* [Puppeteer][WebDriver] Added `pressKeyUp` and `pressKeyDown` to press and release modifier keys like `Control` or `Shift`. By **[martomo](https://github.com/martomo)**.
* [Puppeteer][WebDriver] Added `grabElementBoundingRect` by **[PeterNgTr](https://github.com/PeterNgTr)**.
* **[Puppeteer]** Fixed speed degradation introduced in [#1306](https://github.com/Codeception/CodeceptJS/issues/1306) with accessibility locators support. See [#1953](https://github.com/Codeception/CodeceptJS/issues/1953).
* Added `Config.addHook` to add a function that will update configuration on load.
* Started [`@codeceptjs/configure`](https://github.com/codecept-js/configure) package with a collection of common configuration patterns.
* **[TestCafe]** port's management removed (left on TestCafe itself) by **[orihomie](https://github.com/orihomie)**. Fixes [#1934](https://github.com/Codeception/CodeceptJS/issues/1934).
* **[REST]** Headers are no more declared as singleton variable. Fixes [#1959](https://github.com/Codeception/CodeceptJS/issues/1959)
* Updated Docker image to include run tests in workers with `NUMBER_OF_WORKERS` env variable. By **[PeterNgTr](https://github.com/PeterNgTr)**.
## 2.3.2
* **[Puppeteer]** Fixed Puppeteer 1.20 support by **[davertmik](https://github.com/davertmik)**
* Fixed `run-workers` to run with complex configs. See [#1887](https://github.com/Codeception/CodeceptJS/issues/1887) by **[nitschSB](https://github.com/nitschSB)**
* Added `--suites` option to `run-workers` to split suites by workers (tests of the same suite goes to teh same worker). Thanks **[nitschSB](https://github.com/nitschSB)**.
* Added a guide on [Email Testing](https://codecept.io/email).
* **[retryFailedStepPlugin]** Improved to ignore wait* steps and others. Also added option to ignore this plugin per test bases. See [updated documentation](https://codecept.io/plugins#retryfailedstep). By **[davertmik](https://github.com/davertmik)**
* Fixed using PageObjects as classes by **[Vorobeyko](https://github.com/Vorobeyko)**. See [#1896](https://github.com/Codeception/CodeceptJS/issues/1896)
* **[WebDriver]** Fixed opening more than one tab. See [#1875](https://github.com/Codeception/CodeceptJS/issues/1875) by **[jplegoff](https://github.com/jplegoff)**. Fixes [#1874](https://github.com/Codeception/CodeceptJS/issues/1874)
* Fixed [#1891](https://github.com/Codeception/CodeceptJS/issues/1891) when `I.retry()` affected retries of next steps. By **[davertmik](https://github.com/davertmik)**
## 2.3.1
* **[MockRequest]** Polly helper was renamed to MockRequest.
* [MockRequest][WebDriver] [Mocking requests](https://codecept.io/webdriver#mocking-requests) is now available in WebDriver. Thanks **[radhey1851](https://github.com/radhey1851)**
* **[Puppeteer]** Ensure configured user agent and/or window size is applied to all pages. See [#1862](https://github.com/Codeception/CodeceptJS/issues/1862) by **[martomo](https://github.com/martomo)**
* Improve handling of xpath locators with round brackets by **[nitschSB](https://github.com/nitschSB)**. See [#1870](https://github.com/Codeception/CodeceptJS/issues/1870)
* Use WebDriver capabilities config in wdio plugin. [#1869](https://github.com/Codeception/CodeceptJS/issues/1869) by **[quekshuy](https://github.com/quekshuy)**
## 2.3.0
* **[Parallel testing by workers](https://codecept.io/parallel#parallel-execution-by-workers) introduced** by **[VikalpP](https://github.com/VikalpP)** and **[davertmik](https://github.com/davertmik)**. Use `run-workers` command as faster and simpler alternative to `run-multiple`. Requires NodeJS v12
```
# run all tests in parallel using 3 workers
npx codeceptjs run-workers 3
```
* [GraphQL][GraphQLDataFactory] **Helpers for data management over GraphQL** APIs added. By **[radhey1851](https://github.com/radhey1851)**.
* Learn how to [use GraphQL helper](https://codecept.io/data#graphql) to access GarphQL API
* And how to combine it with [GraphQLDataFactory](https://codecept.io/data#graphql-data-factory) to generate and persist test data.
* **Updated to use Mocha 6**. See [#1802](https://github.com/Codeception/CodeceptJS/issues/1802) by **[elukoyanov](https://github.com/elukoyanov)**
* Added `dry-run` command to print steps of test scenarios without running them. Fails to execute scenarios with `grab*` methods or custom code. See [#1825](https://github.com/Codeception/CodeceptJS/issues/1825) for more details.
```
npx codeceptjs dry-run
```
* **[Appium]** Optimization when clicking, searching for fields by accessibility id. See [#1777](https://github.com/Codeception/CodeceptJS/issues/1777) by **[gagandeepsingh26](https://github.com/gagandeepsingh26)**
* **[TestCafe]** Fixed `switchTo` by **[KadoBOT](https://github.com/KadoBOT)**
* **[WebDriver]** Added geolocation actions by **[PeterNgTr](https://github.com/PeterNgTr)**
* `grabGeoLocation()`
* `setGeoLocation()`
* **[Polly]** Check typeof arguments for mock requests by **[VikalpP](https://github.com/VikalpP)**. Fixes [#1815](https://github.com/Codeception/CodeceptJS/issues/1815)
* CLI improvements by **[jamesgeorge007](https://github.com/jamesgeorge007)**
* `codeceptjs` command prints list of all available commands
* added `codeceptjs -V` flag to print version information
* warns on unknown command
* Added TypeScript files support to `run-multiple` by **[z4o4z](https://github.com/z4o4z)**
* Fixed element position bug in locator builder. See [#1829](https://github.com/Codeception/CodeceptJS/issues/1829) by **[AnotherAnkor](https://github.com/AnotherAnkor)**
* Various TypeScript typings updates by **[elukoyanov](https://github.com/elukoyanov)** and **[Vorobeyko](https://github.com/Vorobeyko)**
* Added `event.step.comment` event for all comment steps like `I.say` or gherking steps.
## 2.2.1
* **[WebDriver]** A [dedicated guide](https://codecept.io/webdriver) written.
* **[TestCafe]** A [dedicated guide](https://codecept.io/testcafe) written.
* **[Puppeteer]** A [chapter on mocking](https://codecept.io/puppeteer#mocking-requests) written
* [Puppeteer][Nightmare][TestCafe] Window mode is enabled by default on `codeceptjs init`.
* **[TestCafe]** Actions implemented by **[hubidu](https://github.com/hubidu)**
* `grabPageScrollPosition`
* `scrollPageToTop`
* `scrollPageToBottom`
* `scrollTo`
* `switchTo`
* Intellisense improvements. Renamed `tsconfig.json` to `jsconfig.json` on init. Fixed autocompletion for Visual Studio Code.
* **[Polly]** Take configuration values from Puppeteer. Fix [#1766](https://github.com/Codeception/CodeceptJS/issues/1766) by **[VikalpP](https://github.com/VikalpP)**
* **[Polly]** Add preconditions to check for puppeteer page availability by **[VikalpP](https://github.com/VikalpP)**. Fixes [#1767](https://github.com/Codeception/CodeceptJS/issues/1767)
* **[WebDriver]** Use filename for `uploadFile` by **[VikalpP](https://github.com/VikalpP)**. See [#1797](https://github.com/Codeception/CodeceptJS/issues/1797)
* **[Puppeteer]** Configure speed of input with `pressKeyDelay` option. By **[hubidu](https://github.com/hubidu)**
* Fixed recursive loading of support objects by **[davertmik](https://github.com/davertmik)**.
* Fixed support object definitions in steps.d.ts by **[johnyb](https://github.com/johnyb)**. Fixes [#1795](https://github.com/Codeception/CodeceptJS/issues/1795)
* Fixed `Data().Scenario().injectDependencies()` is not a function by **[andrerleao](https://github.com/andrerleao)**
* Fixed crash when using xScenario & Scenario.skip with tag by **[VikalpP](https://github.com/VikalpP)**. Fixes [#1751](https://github.com/Codeception/CodeceptJS/issues/1751)
* Dynamic configuration of helpers can be performed with async function. See [#1786](https://github.com/Codeception/CodeceptJS/issues/1786) by **[cviejo](https://github.com/cviejo)**
* Added TS definitions for internal objects by **[Vorobeyko](https://github.com/Vorobeyko)**
* BDD improvements:
* Fix for snippets command with a .feature file that has special characters by **[asselin](https://github.com/asselin)**
* Fix `--path` option on `gherkin:snippets` command by **[asselin](https://github.com/asselin)**. See [#1790](https://github.com/Codeception/CodeceptJS/issues/1790)
* Added `--feature` option to `gherkin:snippets` to enable creating snippets for a subset of .feature files. See [#1803](https://github.com/Codeception/CodeceptJS/issues/1803) by **[asselin](https://github.com/asselin)**.
* Fixed: dynamic configs not reset after test. Fixes [#1776](https://github.com/Codeception/CodeceptJS/issues/1776) by **[cviejo](https://github.com/cviejo)**.
## 2.2.0
* **EXPERIMENTAL** [**TestCafe** helper](https://codecept.io/helpers/TestCafe) introduced. TestCafe allows to run cross-browser tests it its own very fast engine. Supports all browsers including mobile. Thanks to **[hubidu](https://github.com/hubidu)** for implementation! Please test it and send us feedback.
* **[Puppeteer]** Mocking requests enabled by introducing [Polly.js helper](https://codecept.io/helpers/Polly). Thanks **[VikalpP](https://github.com/VikalpP)**
```js
// use Polly & Puppeteer helpers
I.mockRequest('GET', '/api/users', 200);
I.mockRequest('POST', '/users', { user: { name: 'fake' }});
```
* **EXPERIMENTAL** **[Puppeteer]** [Firefox support](https://codecept.io/helpers/Puppeteer-firefox) introduced by **[ngadiyak](https://github.com/ngadiyak)**, see [#1740](https://github.com/Codeception/CodeceptJS/issues/1740)
* **[stepByStepReportPlugin]** use md5 hash to generate reports into unique folder. Fix [#1744](https://github.com/Codeception/CodeceptJS/issues/1744) by **[chimurai](https://github.com/chimurai)**
* Interactive pause improvements:
* print result of `grab` commands
* print message for successful assertions
* `run-multiple` (parallel execution) improvements:
* `bootstrapAll` must be called before creating chunks. [#1741](https://github.com/Codeception/CodeceptJS/issues/1741) by **[Vorobeyko](https://github.com/Vorobeyko)**
* Bugfix: If value in config has falsy value then multiple config does not overwrite original value. [#1756](https://github.com/Codeception/CodeceptJS/issues/1756) by **[LukoyanovE](https://github.com/LukoyanovE)**
* Fixed hooks broken in 2.1.5 by **[Vorobeyko](https://github.com/Vorobeyko)**
* Fix references to support objects when using Dependency Injection. Fix by **[johnyb](https://github.com/johnyb)**. See [#1701](https://github.com/Codeception/CodeceptJS/issues/1701)
* Fix dynamic config applied for multiple helpers by **[VikalpP](https://github.com/VikalpP)** [#1743](https://github.com/Codeception/CodeceptJS/issues/1743)
## 2.1.5
* **EXPERIMENTAL** [Wix Detox support](https://github.com/Codeception/detox-helper) introduced as standalone helper. Provides a faster alternative to Appium for mobile testing.
* Saving successful commands inside interactive pause into `_output/cli-history` file. By **[hubidu](https://github.com/hubidu)**
* Fixed hanging error handler inside scenario. See [#1721](https://github.com/Codeception/CodeceptJS/issues/1721) by **[haily-lgc](https://github.com/haily-lgc)**.
* Fixed by **[Vorobeyko](https://github.com/Vorobeyko)**: tests did not fail when an exception was raised in async bootstrap.
* **[WebDriver]** Added window control methods by **[emmonspired](https://github.com/emmonspired)**
* `grabAllWindowHandles` returns all window handles
* `grabCurrentWindowHandle` returns current window handle
* `switchToWindow` switched to window by its handle
* **[Appium]** Fixed using `host` as configuration by **[trinhpham](https://github.com/trinhpham)**
* Fixed `run-multiple` command when `tests` config option is undefined (in Gherkin scenarios). By **[gkushang](https://github.com/gkushang)**.
* German translation introduced by **[hubidu](https://github.com/hubidu)**
## 2.1.4
* [WebDriver][Puppeteer][Protractor][Nightmare] A11y locator support introduced by **[Holorium](https://github.com/Holorium)**. Clickable elements as well as fields can be located by following attributes:
* `aria-label`
* `title`
* `aria-labelledby`
* **[Puppeteer]** Added support for React locators.
* New [React Guide](https://codecept.io/react) added.
* **[Puppeteer]** Deprecated `downloadFile`
* **[Puppeteer]** Introduced `handleDownloads` replacing `downloadFile`
* [puppeteerCoverage plugin] Fixed path already exists error by **[seta-tuha](https://github.com/seta-tuha)**.
* Fixed 'ERROR: ENAMETOOLONG' creating directory names in `run-multiple` with long config. By **[artvinn](https://github.com/artvinn)**
* **[REST]** Fixed url autocompletion combining base and relative paths by **[LukoyanovE](https://github.com/LukoyanovE)**
* [Nightmare][Protractor] `uncheckOption` method introduced by **[PeterNgTr](https://github.com/PeterNgTr)**
* [autoLogin plugin] Enable to use without `await` by **[tsuemura](https://github.com/tsuemura)**
* **[Puppeteer]** Fixed `UnhandledPromiseRejectionWarning: "Execution context was destroyed...` by **[adrielcodeco](https://github.com/adrielcodeco)**
* **[WebDriver]** Keep browser window dimensions when starting a new session by **[spiroid](https://github.com/spiroid)**
* Replace Ghekrin plceholders with values in files that combine a scenerio outline and table by **[medtoure18](https://github.com/medtoure18)**.
* Added Documentation to [locate elements in React Native](https://codecept.io/mobile-react-native-locators) apps. By **[DimGun](https://github.com/DimGun)**.
* Adding optional `path` parameter to `bdd:snippets` command to append snippets to a specific file. By **[cthorsen31](https://github.com/cthorsen31)**.
* Added optional `output` parameter to `def` command by **[LukoyanovE](https://github.com/LukoyanovE)**.
* **[Puppeteer]** Added `grabDataFromPerformanceTiming` by **[PeterNgTr](https://github.com/PeterNgTr)**.
* axios updated to `0.19.0` by **[SteveShaffer](https://github.com/SteveShaffer)**
* TypeScript defitions updated by **[LukoyanovE](https://github.com/LukoyanovE)**. Added `secret` and `inject` function.
## 2.1.3
* Fixed autoLogin plugin to inject `login` function
* Fixed using `toString()` in DataTablewhen it is defined by **[tsuemura](https://github.com/tsuemura)**
## 2.1.2
* Fixed `inject` to load objects recursively.
* Fixed TypeScript definitions for locators by **[LukoyanovE](https://github.com/LukoyanovE)**
* **EXPERIMENTAL** **[WebDriver]** ReactJS locators support with webdriverio v5.8+:
```js
// locating React element by name, prop, state
I.click({ react: 'component-name', props: {}, state: {} });
I.seeElement({ react: 'component-name', props: {}, state: {} });
```
## 2.1.1
* Do not retry `within` and `session` calls inside `retryFailedStep` plugin. Fix by **[tsuemura](https://github.com/tsuemura)**
## 2.1.0
* Added global `inject()` function to require actor and page objects using dependency injection. Recommended to use in page objects, step definition files, support objects:
```js
// old way
const I = actor();
const myPage = require('../page/myPage');
// new way
const { I, myPage } = inject();
```
* Added global `secret` function to fill in sensitive data. By **[RohanHart](https://github.com/RohanHart)**:
```js
I.fillField('password', secret('123456'));
```
* [wdioPlugin](https://codecept.io/plugins/#wdio) Added a plugin to **support webdriverio services** including *selenium-standalone*, *sauce*, *browserstack*, etc. **Sponsored by **[GSasu](https://github.com/GSasu)****
* **[Appium]** Fixed `swipe*` methods by **[PeterNgTr](https://github.com/PeterNgTr)**
* BDD Gherkin Improvements:
* Implemented `run-multiple` for feature files. **Sponsored by **[GSasu](https://github.com/GSasu)****
* Added `--features` and `--tests` options to `run-multiple`. **Sponsored by **[GSasu](https://github.com/GSasu)****
* Implemented `Before` and `After` hooks in [step definitions](https://codecept.io/bdd#before)
* Fixed running tests by absolute path. By **[batalov](https://github.com/batalov)**.
* Enabled the adding screenshot to failed test for moch-junit-reporter by **[PeterNgTr](https://github.com/PeterNgTr)**.
* **[Puppeteer]** Implemented `uncheckOption` and fixed behavior of `checkOption` by **[aml2610](https://github.com/aml2610)**
* **[WebDriver]** Fixed `seeTextEquals` on empty strings by **[PeterNgTr](https://github.com/PeterNgTr)**
* **[Puppeteer]** Fixed launch with `browserWSEndpoint` config by **[ngadiyak](https://github.com/ngadiyak)**.
* **[Puppeteer]** Fixed switching back to main window in multi-session mode by **[davertmik](https://github.com/davertmik)**.
* **[autoLoginPlugin]** Fixed using async functions for auto login by **[nitschSB](https://github.com/nitschSB)**
> This release was partly sponsored by **[GSasu](https://github.com/GSasu)**. Thanks for the support!
Do you want to improve this project? [Learn more about sponsorin CodeceptJS
## 2.0.8
* **[Puppeteer]** Added `downloadFile` action by **[PeterNgTr](https://github.com/PeterNgTr)**.
Use it with `FileSystem` helper to test availability of a file:
```js
const fileName = await I.downloadFile('a.file-link');
I.amInPath('output');
I.seeFile(fileName);
```
> Actions `amInPath` and `seeFile` are taken from [FileSystem](https://codecept.io/helpers/FileSystem) helper
* **[Puppeteer]** Fixed `autoLogin` plugin with Puppeteer by **[davertmik](https://github.com/davertmik)**
* **[WebDriver]** `seeInField` should throw error if element has no value attrubite. By **[PeterNgTr](https://github.com/PeterNgTr)**
* **[WebDriver]** Fixed `seeTextEquals` passes for any string if element is empty by **[PeterNgTr](https://github.com/PeterNgTr)**.
* **[WebDriver]** Internal refctoring to use `el.isDisplayed` to match latest webdriverio implementation. Thanks to **[LukoyanovE](https://github.com/LukoyanovE)**
* [allure plugin] Add ability enable [screenshotDiff plugin](https://github.com/allure-framework/allure2/blob/master/plugins/screen-diff-plugin/README.md) by **[Vorobeyko](https://github.com/Vorobeyko)**
* **[Appium]** Fixed `locator.stringify` call by **[LukoyanovE](https://github.com/LukoyanovE)**
## 2.0.7
* [WebDriver][Protractor][Nightmare] `rightClick` method implemented (fixed) in a standard way. By **[davertmik](https://github.com/davertmik)**
* **[WebDriver]** Updated WebDriver API calls in helper. By **[PeterNgTr](https://github.com/PeterNgTr)**
* **[stepByStepReportPlugin]** Added `screenshotsForAllureReport` config options to automatically attach screenshots to allure reports. By **[PeterNgTr](https://github.com/PeterNgTr)**
* **[allurePlugin]** Added `addLabel` method by **[Vorobeyko](https://github.com/Vorobeyko)**
* Locator Builder: fixed `withChild` and `withDescendant` to match deep nested siblings by **[Vorobeyko](https://github.com/Vorobeyko)**.
## 2.0.6
* Introduced [Custom Locator Strategies](https://codecept.io/locators#custom-locators).
* Added [Visual Testing Guide](https://codecept.io/visual) by **[puneet0191](https://github.com/puneet0191)** and **[MitkoTschimev](https://github.com/MitkoTschimev)**.
* **[Puppeteer]** [`puppeteerCoverage`](https://codecept.io/plugins#puppeteercoverage) plugin added to collect code coverage in JS. By **[dvillarama](https://github.com/dvillarama)**
* Make override option in `run-multiple` to respect the generated overridden config by **[kinyat](https://github.com/kinyat)**
* Fixed deep merge for `container.append()`. Introduced `lodash.merge()`. By **[Vorobeyko](https://github.com/Vorobeyko)**
* Fixed saving screenshot on Windows by
* Fix errors on using interactive shell with Allure plugin by tsuemura
* Fixed using dynamic injections with `Scenario().injectDependencies` by **[tsemura](https://github.com/tsemura)**
* [WebDriver][Puppeteer][Nightmare][Protractor] Fixed url protocol detection for non-http urls by **[LukoyanovE](https://github.com/LukoyanovE)**
* **[WebDriver]** Enabled compatibility with `stepByStepReport` by **[tsuemura](https://github.com/tsuemura)**
* **[WebDriver]** Fixed `grabHTMLFrom` to return innerHTML value by **[Holorium](https://github.com/Holorium)**. Fixed compatibility with WebDriverIO.
* **[WebDriver]** `grabHTMLFrom` to return one HTML vlaue for one element matched, array if multiple elements found by **[davertmik](https://github.com/davertmik)**.
* **[Nightmare]** Added `grabHTMLFrom` by **[davertmik](https://github.com/davertmik)**
* Fixed `bootstrapAll` and `teardownAll` launch with path as argument by **[LukoyanovE](https://github.com/LukoyanovE)**
* Fixed `bootstrapAll` and `teardownAll` calls from exported object by **[LukoyanovE](https://github.com/LukoyanovE)**
* **[WebDriver]** Added possibility to define conditional checks interval for `waitUntil` by **[LukoyanovE](https://github.com/LukoyanovE)**
* Fixed storing current data in data driven tests in a test object. By **[Vorobeyko](https://github.com/Vorobeyko)**
* **[WebDriver]** Fixed `hostname` config option overwrite when setting a cloud provider. By **[LukoyanovE](https://github.com/LukoyanovE)**
* **[WebDriver]** `dragSlider` method implemented by **[DavertMik](https://github.com/DavertMik)**
* **[WebDrover]** Fixed `scrollTo` to use new webdriverio API by **[PeterNgTr](https://github.com/PeterNgTr)**
* Added Japanese translation file by **[tsemura](https://github.com/tsemura)**
* Added `Locator.withDescendant()` method to find an element which contains a descendant (child, grandchild) by **[Vorobeyko](https://github.com/Vorobeyko)**
* **[WebDriver]** Fixed configuring capabilities for Selenoid and IE by **[Vorobeyko](https://github.com/Vorobeyko)**
* **[WebDriver]** Restore original window size when taking full size screenshot by **[tsuemura](https://github.com/tsuemura)**
* Enabled `throws()`,` fails()`, `retry()`, `timeout()`, `config()` functions for data driven tests. By **[jjm409](https://github.com/jjm409)**
## 2.0.5
[Broken Release]
## 2.0.4
* [WebDriver][Protractor][Nightmare][Puppeteer] `grabAttributeFrom` returns an array when multiple elements matched. By **[PeterNgTr](https://github.com/PeterNgTr)**
* [autoLogin plugin] Fixed merging users config by **[nealfennimore](https://github.com/nealfennimore)**
* [autoDelay plugin] Added WebDriver to list of supported helpers by **[mattin4d](https://github.com/mattin4d)**
* **[Appium]** Fixed using locators in `waitForElement`, `waitForVisible`, `waitForInvisible`. By **[eduardofinotti](https://github.com/eduardofinotti)**
* [allure plugin] Add tags to allure reports by **[Vorobeyko](https://github.com/Vorobeyko)**
* [allure plugin] Add skipped tests to allure reports by **[Vorobeyko](https://github.com/Vorobeyko)**
* Fixed `Logged Test name | [object Object]` when used Data().Scenario(). By **[Vorobeyko](https://github.com/Vorobeyko)**
* Fixed Data().only.Scenario() to run for all datasets. By **[Vorobeyko](https://github.com/Vorobeyko)**
* **[WebDriver]** `attachFile` to work with hidden elements. Fixed in [#1460](https://github.com/Codeception/CodeceptJS/issues/1460) by **[tsuemura](https://github.com/tsuemura)**
## 2.0.3
* [**autoLogin plugin**](https://codecept.io/plugins#autologin) added. Allows to log in once and reuse browser session. When session expires - automatically logs in again. Can persist session between runs by saving cookies to file.
* Fixed `Maximum stack trace` issue in `retryFailedStep` plugin.
* Added `locate()` function into the interactive shell.
* **[WebDriver]** Disabled smartWait for interactive shell.
* **[Appium]** Updated methods to use for mobile locators
* `waitForElement`
* `waitForVisible`
* `waitForInvisible`
* Helper and page object generators no longer update config automatically. Please add your page objects and helpers manually.
## 2.0.2
* **[Puppeteer]** Improved handling of connection with remote browser using Puppeteer by **[martomo](https://github.com/martomo)**
* **[WebDriver]** Updated to webdriverio 5.2.2 by **[martomo](https://github.com/martomo)**
* Interactive pause improvements by **[davertmik](https://github.com/davertmik)**
* Disable retryFailedStep plugin in in interactive mode
* Removes `Interface: parseInput` while in interactive pause
* **[ApiDataFactory]** Improvements
* added `fetchId` config option to override id retrieval from payload
* added `onRequest` config option to update request in realtime
* added `returnId` config option to return ids of created items instead of items themvelves
* added `headers` config option to override default headers.
* added a new chapter into [DataManagement](https://codecept.io/data#api-requests-using-browser-session)
* **[REST]** Added `onRequest` config option
## 2.0.1
* Fixed creating project with `codecept init`.
* Fixed error while installing webdriverio@5.
* Added code beautifier for generated configs.
* **[WebDriver]** Updated to webdriverio 5.1.0
## 2.0.0
* **[WebDriver]** **Breaking Change.** Updated to webdriverio v5. New helper **WebDriver** helper introduced.
* **Upgrade plan**:
1. Install latest webdriverio
```
npm install webdriverio@5 --save
```
2. Replace `WebDriverIO` => `WebDriver` helper name in config.
3. Read [webdriverio changelog](https://github.com/webdriverio/webdriverio/blob/master/CHANGELOG.md). If you were using webdriver API in your helpers, upgrade accordingly.
4. We made WebDriver helper to be compatible with old API so no additional changes required.
> If you face issues using webdriverio v5 you can still use webdriverio 4.x and WebDriverIO helper. Make sure you have `webdriverio: ^4.0` installed.
* Known issues: `attachFile` doesn't work with proxy server.
* **[Appium]** **Breaking Change.** Updated to use webdriverio v5 as well. See upgrade plan ↑
* **[REST]** **Breaking Change.** Replaced `unirest` library with `axios`.
* **Upgrade plan**:
1. Refer to [axios API](https://github.com/axios/axios).
2. If you were using `unirest` requests/responses in your tests change them to axios format.
* **Breaking Change.** Generators support in tests removed. Use `async/await` in your tests
* **Using `codecept.conf.js` as default configuration format**
* Fixed "enametoolong" error when saving screenshots for data driven tests by **[PeterNgTr](https://github.com/PeterNgTr)**
* Updated NodeJS to 10 in Docker image
* **[Pupeteer]** Add support to use WSEndpoint. Allows to execute tests remotely. [See [#1350](https://github.com/Codeception/CodeceptJS/issues/1350)] by **[gabrielcaires](https://github.com/gabrielcaires)** (https://github.com/Codeception/CodeceptJS/pull/1350)
* In interactive shell **[Enter]** goes to next step. Improvement by **[PeterNgTr](https://github.com/PeterNgTr)**.
* `I.say` accepts second parameter as color to print colorful comments. Improvement by **[PeterNgTr](https://github.com/PeterNgTr)**.
```js
I.say('This is red', 'red'); //red is used
I.say('This is blue', 'blue'); //blue is used
I.say('This is by default'); //cyan is used
```
* Fixed allure reports for multi session testing by **[PeterNgTr](https://github.com/PeterNgTr)**
* Fixed allure reports for hooks by **[PeterNgTr](https://github.com/PeterNgTr)**
## 1.4.6
* **[Puppeteer]** `dragSlider` action added by **[PeterNgTr](https://github.com/PeterNgTr)**
* **[Puppeteer]** Fixed opening browser in shell mode by **[allenhwkim](https://github.com/allenhwkim)**
* **[Puppeteer]** Fixed making screenshot on additional sessions by **[PeterNgTr](https://github.com/PeterNgTr)**. Fixes [#1266](https://github.com/Codeception/CodeceptJS/issues/1266)
* Added `--invert` option to `run-multiple` command by **[LukoyanovE](https://github.com/LukoyanovE)**
* Fixed steps in Allure reports by **[PeterNgTr](https://github.com/PeterNgTr)**
* Add option `output` to customize output directory in [stepByStepReport plugin](https://codecept.io/plugins/#stepbystepreport). By **[fpsthirty](https://github.com/fpsthirty)**
* Changed type definition of PageObjects to get auto completion by **[rhicu](https://github.com/rhicu)**
* Fixed steps output for async/arrow functions in CLI by **[LukoyanovE](https://github.com/LukoyanovE)**. See [#1329](https://github.com/Codeception/CodeceptJS/issues/1329)
## 1.4.5
* Add **require** param to main config. Allows to require Node modules before executing tests. By **[LukoyanovE](https://github.com/LukoyanovE)**. For example:
* Use `ts-node/register` to register TypeScript parser
* Use `should` to register should-style assertions
```js
"require": ["ts-node/register", "should"]
```
* **[WebDriverIO]** Fix timeouts definition to be compatible with W3C drivers. By **[LukoyanovE](https://github.com/LukoyanovE)**
* Fixed: exception in Before block w/ Mocha causes test not to report failure. See [#1292](https://github.com/Codeception/CodeceptJS/issues/1292) by **[PeterNgTr](https://github.com/PeterNgTr)**
* Command `run-parallel` now accepts `--override` flag. Thanks to **[ClemCB](https://github.com/ClemCB)**
* Fixed Allure report with Before/BeforeSuite/After/AfterSuite steps. By **[PeterNgTr](https://github.com/PeterNgTr)**
* Added `RUN_MULTIPLE` env variable to [Docker config](https://codecept.io/docker/). Allows to run tests in parallel inside a container. Thanks to **[PeterNgTr](https://github.com/PeterNgTr)**
* **[Mochawesome]** Fixed showing screenshot on failure. Fix by **[PeterNgTr](https://github.com/PeterNgTr)**
* Fixed running tests filtering by tag names defined via `Scenario.tag()`
## 1.4.4
* [autoDelay plugin](https://codecept.io/plugins/#autoDelay) added. Adds tiny delay before and after an action so the page could react to actions performed.
* **[Puppeteer]** improvements by **[luismanuel001](https://github.com/luismanuel001)**
* `click` no longer waits for navigation
* `clickLink` method added. Performs a click and waits for navigation.
* Bootstrap scripts to be started only for `run` command and ignored on `list`, `def`, etc. Fix by **[LukoyanovE](https://github.com/LukoyanovE)**
## 1.4.3
* Groups renamed to Tags for compatibility with BDD layer
* Test and suite objects to contain tags property which can be accessed from internal API
* Fixed adding tags for Scenario Outline in BDD
* Added `tag()` method to ScenarioConfig and FeatureConfig:
```js
Scenario('update user profile', () => {
// test goes here
}).tag('@slow');
```
* Fixed attaching Allure screenshot on exception. Fix by **[DevinWatson](https://github.com/DevinWatson)**
* Improved type definitions for custom steps. By **[Akxe](https://github.com/Akxe)**
* Fixed setting `multiple.parallel.chunks` as environment variable in config. See [#1238](https://github.com/Codeception/CodeceptJS/issues/1238) by **[ngadiyak](https://github.com/ngadiyak)**
## 1.4.2
* Fixed setting config for plugins (inclunding setting `outputDir` for allure) by **[jplegoff](https://github.com/jplegoff)**
## 1.4.1
* Added `plugins` option to `run-multiple`
* Minor output fixes
* Added Type Definition for Helper class by **[Akxe](https://github.com/Akxe)**
* Fixed extracing devault extension in generators by **[Akxe](https://github.com/Akxe)**
## 1.4.0
* [**Allure Reporter Integration**](https://codecept.io/reports/#allure). Full inegration with Allure Server. Get nicely looking UI for tests,including steps, nested steps, and screenshots. Thanks **Natarajan Krishnamurthy **[krish](https://github.com/krish)**** for sponsoring this feature.
* [Plugins API introduced](https://codecept.io/hooks/#plugins). Create custom plugins for CodeceptJS by hooking into event dispatcher, and using promise recorder.
* **Official [CodeceptJS plugins](https://codecept.io/plugins) added**:
* **`stepByStepReport` - creates nicely looking report to see test execution as a slideshow**. Use this plugin to debug tests in headless environment without recording a video.
* `allure` - Allure reporter added as plugin.
* `screenshotOnFail` - saves screenshot on fail. Replaces similar functionality from helpers.
* `retryFailedStep` - to rerun each failed step.
* **[Puppeteer]** Fix `executeAsyncScript` unexpected token by **[jonathanz](https://github.com/jonathanz)**
* Added `override` option to `run-multiple` command by **[svarlet](https://github.com/svarlet)**
## 1.3.3
* Added `initGlobals()` function to API of [custom runner](https://codecept.io/hooks/#custom-runner).
## 1.3.2
* Interactve Shell improvements for `pause()`
* Added `next` command for **step-by-step debug** when using `pause()`.
* Use `After(pause);` in a to start interactive console after last step.
* **[Puppeteer]** Updated to Puppeteer 1.6.0
* Added `waitForRequest` to wait for network request.
* Added `waitForResponse` to wait for network response.
* Improved TypeScript definitions to support custom steps and page objects. By **[xt1](https://github.com/xt1)**
* Fixed XPath detection to accept XPath which starts with `./` by **[BenoitZugmeyer](https://github.com/BenoitZugmeyer)**
## 1.3.1
* BDD-Gherkin: Fixed running async steps.
* **[Puppeteer]** Fixed process hanging for 30 seconds. Page loading timeout default via `getPageTimeout` set 0 seconds.
* **[Puppeteer]** Improved displaying client-side console messages in debug mode.
* **[Puppeteer]** Fixed closing sessions in `restart:false` mode for multi-session mode.
* **[Protractor]** Fixed `grabPopupText` to not throw error popup is not opened.
* **[Protractor]** Added info on using 'direct' Protractor driver to helper documentation by **[xt1](https://github.com/xt1)**.
* **[WebDriverIO]** Added a list of all special keys to WebDriverIO helper by **[davertmik](https://github.com/davertmik)** and **[xt1](https://github.com/xt1)**.
* Improved TypeScript definitions generator by **[xt1](https://github.com/xt1)**
## 1.3.0
* **Cucumber-style BDD. Introduced [Gherkin support](https://codecept.io/bdd). Thanks to [David Vins](https://github.com/dvins) and [Omedym](https://www.omedym.com) for sponsoring this feature**.
Basic feature file:
```gherkin
Feature: Business rules
In order to achieve my goals
As a persona
I want to be able to interact with a system
Scenario: do anything in my life
Given I need to open Google
```
Step definition:
```js
const I = actor();
Given('I need to open Google', () => {
I.amOnPage('https://google.com');
});
```
Run it with `--features --steps` flag:
```
codeceptjs run --steps --features
```
---
* **Brekaing Chnage** `run` command now uses relative path + test name to run exactly one test file.
Previous behavior (removed):
```
codeceptjs run basic_test.js
```
Current behavior (relative path to config + a test name)
```
codeceptjs run tests/basic_test.js
```
This change allows using auto-completion when running a specific test.
---
* Nested steps output enabled for page objects.
* to see high-level steps only run tests with `--steps` flag.
* to see PageObjects implementation run tests with `--debug`.
* PageObjects simplified to remove `_init()` extra method. Try updated generators and see [updated guide](https://codecept.io/pageobjects/#pageobject).
* **[Puppeteer]** [Multiple sessions](https://codecept.io/acceptance/#multiple-sessions) enabled. Requires Puppeteer >= 1.5
* **[Puppeteer]** Stability improvement. Waits for for `load` event on page load. This strategy can be changed in config:
* `waitForNavigation` config option introduced. Possible options: `load`, `domcontentloaded`, `networkidle0`, `networkidle2`. See [Puppeteer API](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagewaitfornavigationoptions)
* `getPageTimeout` config option to set maximum navigation time in milliseconds. Default is 30 seconds.
* `waitForNavigation` method added. Explicitly waits for navigation to be finished.
* [WebDriverIO][Protractor][Puppeteer][Nightmare] **Possible BC** `grabTextFrom` unified. Return a text for single matched element and an array of texts for multiple elements.
* [Puppeteer]Fixed `resizeWindow` by **[sergejkaravajnij](https://github.com/sergejkaravajnij)**
* [WebDriverIO][Protractor][Puppeteer][Nightmare] `waitForFunction` added. Waits for client-side JavaScript function to return true by **[GREENpoint](https://github.com/GREENpoint)**.
* **[Puppeteer]** `waitUntil` deprecated in favor of `waitForFunction`.
* Added `filter` function to DataTable.
* Send non-nested array of files to custom parallel execution chunking by **[mikecbrant](https://github.com/mikecbrant)**.
* Fixed invalid output directory path for run-multiple by **[mikecbrant](https://github.com/mikecbrant)**.
* **[WebDriverIO]** `waitUntil` timeout accepts time in seconds (as all other wait* functions). Fix by **[truesrc](https://github.com/truesrc)**.
* **[Nightmare]** Fixed `grabNumberOfVisibleElements` to work similarly to `seeElement`. Thx to **[stefanschenk](https://github.com/stefanschenk)** and Jinbo Jinboson.
* **[Protractor]** Fixed alert handling error with message 'no such alert' by **[truesrc](https://github.com/truesrc)**.
## 1.2.1
* Fixed running `I.retry()` on multiple steps.
* Fixed parallel execution wih chunks.
* **[Puppeteer]** Fixed `grabNumberOfVisibleElements` to return `0` instead of throwing error if no elements are found.
## 1.2.0
* [WebDriverIO][Protractor][Multiple Sessions](https://codecept.io/acceptance/#multiple-sessions). Run several browser sessions in one test. Introduced `session` command, which opens additional browser window and closes it after a test.
```js
Scenario('run in different browsers', (I) => {
I.amOnPage('/hello');
I.see('Hello!');
session('john', () => {
I.amOnPage('/bye');
I.dontSee('Hello');
I.see('Bye');
});
I.see('Hello');
});
```
* [Parallel Execution](https://codecept.io/advanced/#parallel-execution) by **[sveneisenschmidt](https://github.com/sveneisenschmidt)**. Run tests in parallel specifying number of chunks:
```js
"multiple": {
"parallel": {
// run in 2 processes
"chunks": 2,
// run all tests in chrome
"browsers": ["chrome"]
},
}
```
* [Locator Builder](https://codecept.io/locators). Write complex locators with simplest API combining CSS and XPath:
```js
// select 'Edit' link inside 2nd row of a table
locate('//table')
.find('tr')
.at(2)
.find('a')
.withText('Edit');
```
* [Dynamic configuration](https://codecept.io/advanced/#dynamic-configuration) to update helpers config per test or per suite.
* Added `event.test.finished` which fires synchronously for both failed and passed tests.
* [WebDriverIO][Protractor][Nightmare][Puppeteer] Full page screenshots on failure disabled by default. See [issue[#1600](https://github.com/Codeception/CodeceptJS/issues/1600). You can enabled them with `fullPageScreenshots: true`, however they may work unstable in Selenium.
* `within` blocks can return values. See [updated documentation](https://codecept.io/basics/#within).
* Removed doublt call to `_init` in helpers. Fixes issue [#1036](https://github.com/Codeception/CodeceptJS/issues/1036)
* Added scenario and feature configuration via fluent API:
```js
Feature('checkout')
.timeout(3000)
.retry(2);
Scenario('user can order in firefox', (I) => {
// see dynamic configuration
}).config({ browser: 'firefox' })
.timeout(20000);
Scenario('this test should throw error', (I) => {
// I.amOnPage
}).throws(new Error);
```
## 1.1.8
* Fixed generating TypeScript definitions with `codeceptjs def`.
* Added Chinese translation ("zh-CN" and "zh-TW") by **[TechQuery](https://github.com/TechQuery)**.
* Fixed running tests from a different folder specified by `-c` option.
* **[Puppeteer]** Added support for hash handling in URL by **[gavoja](https://github.com/gavoja)**.
* **[Puppeteer]** Fixed setting viewport size by **[gavoja](https://github.com/gavoja)**. See [Puppeteer issue](https://github.com/GoogleChrome/puppeteer/issues/1183)
## 1.1.7
* Docker Image updateed. [See updated reference](https://codecept.io/docker/):
* codeceptjs package is mounted as `/codecept` insde container
* tests directory is expected to be mounted as `/tests`
* `codeceptjs` global runner added (symlink to `/codecept/bin/codecept.js`)
* **[Protractor]** Functions added by **[reubenmiller](https://github.com/reubenmiller)**:
* `_locateCheckable (only available from other helpers)`
* `_locateClickable (only available from other helpers)`
* `_locateFields (only available from other helpers)`
* `acceptPopup`
* `cancelPopup`
* `dragAndDrop`
* `grabBrowserLogs`
* `grabCssPropertyFrom`
* `grabHTMLFrom`
* `grabNumberOfVisibleElements`
* `grabPageScrollPosition (new)`
* `rightClick`
* `scrollPageToBottom`
* `scrollPageToTop`
* `scrollTo`
* `seeAttributesOnElements`
* `seeCssPropertiesOnElements`
* `seeInPopup`
* `seeNumberOfVisibleElements`
* `switchTo`
* `waitForEnabled`
* `waitForValue`
* `waitInUrl`
* `waitNumberOfVisibleElements`
* `waitToHide`
* `waitUntil`
* `waitUrlEquals`
* **[Nightmare]** added:
* `grabPageScrollPosition` (new)
* `seeNumberOfVisibleElements`
* `waitToHide`
* **[Puppeteer]** added:
* `grabPageScrollPosition` (new)
* **[WebDriverIO]** added"
* `grabPageScrollPosition` (new)
* **[Puppeteer]** Fixed running wait* functions without setting `sec` parameter.
* [Puppeteer][Protractor] Fixed bug with I.click when using an object selector with the xpath property. By **[reubenmiller](https://github.com/reubenmiller)**
* [WebDriverIO][Protractor][Nightmare][Puppeteer] Fixed I.switchTo(0) and I.scrollTo(100, 100) api inconsistencies between helpers.
* **[Protractor]** Fixing bug when `seeAttributesOnElements` and `seeCssPropertiesOnElement` were incorrectly passing when the attributes/properties did not match by **[reubenmiller](https://github.com/reubenmiller)**
* **[WebDriverIO]** Use inbuilt dragAndDrop function (still doesn't work in Firefox). By **[reubenmiller](https://github.com/reubenmiller)**
* Support for Nightmare 3.0
* Enable glob patterns in `config.test` / `Codecept.loadTests` by **[sveneisenschmidt](https://github.com/sveneisenschmidt)**
* Enable overriding of `config.tests` for `run-multiple` by **[sveneisenschmidt](https://github.com/sveneisenschmidt)**
## 1.1.6
* Added support for `async I =>` functions syntax in Scenario by **[APshenkin](https://github.com/APshenkin)**
* [WebDriverIO][Protractor][Puppeteer][Nightmare] `waitForInvisible` waits for element to hide or to be removed from page. By **[reubenmiller](https://github.com/reubenmiller)**
* [Protractor][Puppeteer][Nightmare] Added `grabCurrentUrl` function. By **[reubenmiller](https://github.com/reubenmiller)**
* **[WebDriverIO]** `grabBrowserUrl` deprecated in favor of `grabCurrentUrl` to unify the API.
* **[Nightmare]** Improved element visibility detection by **[reubenmiller](https://github.com/reubenmiller)**
* **[Puppeteer]** Fixing function calls when clearing the cookies and localstorage. By **[reubenmiller](https://github.com/reubenmiller)**
* **[Puppeteer]** Added `waitForEnabled`, `waitForValue` and `waitNumberOfVisibleElements` methods by **[reubenmiller](https://github.com/reubenmiller)**
* **[WebDriverIO]** Fixed `grabNumberOfVisibleElements` to return 0 when no visible elements are on page. By **[michaltrunek](https://github.com/michaltrunek)**
* Helpers API improvements (by **[reubenmiller](https://github.com/reubenmiller)**)
* `_passed` hook runs after a test passed successfully
* `_failed` hook runs on a failed test
* Hooks API. New events added by **[reubenmiller](https://github.com/reubenmiller)**:
* `event.all.before` - executed before all tests
* `event.all.after` - executed after all tests
* `event.multiple.before` - executed before all processes in run-multiple
* `event.multiple.after` - executed after all processes in run-multiple
* Multiple execution
* Allow `AfterSuite` and `After` test hooks to be defined after the first Scenario. By **[reubenmiller](https://github.com/reubenmiller)**
* **[Nightmare]** Prevent `I.amOnpage` navigation if the browser is already at the given url
* Multiple-Run: Added new `bootstrapAll` and `teardownAll` hooks to be executed before and after all processes
* `codeceptjs def` command accepts `--config` option. By **[reubenmiller](https://github.com/reubenmiller)**
## 1.1.5
* **[Puppeteer]** Rerun steps failed due to "Cannot find context with specified id" Error.
* Added syntax to retry a single step:
```js
// retry action once on failure
I.retry().see('Hello');
// retry action 3 times on failure
I.retry(3).see('Hello');
// retry action 3 times waiting for 0.1 second before next try
I.retry({ retries: 3, minTimeout: 100 }).see('Hello');
// retry action 3 times waiting no more than 3 seconds for last retry
I.retry({ retries: 3, maxTimeout: 3000 }).see('Hello');
// retry 2 times if error with message 'Node not visible' happens
I.retry({
retries: 2,
when: err => err.message === 'Node not visible'
}).seeElement('#user');
```
* `Scenario().injectDependencies` added to dynamically add objects into DI container by **[Apshenkin](https://github.com/Apshenkin)**. See [Dependency Injection section in PageObjects](https://codecept.io/pageobjects/#dependency-injection).
* Fixed using async/await functions inside `within`
* [WebDriverIO][Protractor][Puppeteer][Nightmare] **`waitUntilExists` deprecated** in favor of `waitForElement`
* [WebDriverIO][Protractor] **`waitForStalenessOf` deprecated** in favor of `waitForDetached`
* [WebDriverIO][Protractor][Puppeteer][Nightmare] `waitForDetached` added
* **[Nightmare]** Added `I.seeNumberOfElements()` by **[pmoncadaisla](https://github.com/pmoncadaisla)**
* **[Nightmare]** Load blank page when starting nightmare so that the .evaluate function will work if _failed/saveScreenshot is triggered by **[reubenmiller](https://github.com/reubenmiller)**
* Fixed using plain arrays for data driven tests by **[reubenmiller](https://github.com/reubenmiller)**
* **[Puppeteer]** Use default tab instead of opening a new tab when starting the browser by **[reubenmiller](https://github.com/reubenmiller)**
* **[Puppeteer]** Added `grabNumberOfTabs` function by **[reubenmiller](https://github.com/reubenmiller)**
* **[Puppeteer]** Add ability to set user-agent by **[abidhahmed](https://github.com/abidhahmed)**
* **[Puppeteer]** Add keepCookies and keepBrowserState **[abidhahmed](https://github.com/abidhahmed)**
* **[Puppeteer]** Clear value attribute instead of innerhtml for TEXTAREA by **[reubenmiller](https://github.com/reubenmiller)**
* **[REST]** fixed sending string payload by **[michaltrunek](https://github.com/michaltrunek)**
* Fixed unhandled rejection in async/await tests by **[APshenkin](https://github.com/APshenkin)**
## 1.1.4
* Removed `yarn` call in package.json
* Fixed `console.log` in Puppeteer by **[othree](https://github.com/othree)**
* **[Appium]** `runOnAndroid` and `runOnIOS` can receive a function to check capabilities dynamically:
```js
I.runOnAndroid(caps => caps.platformVersion >=