@badisi/wdio-harness
Version:
WebdriverIO support for Angular component test harnesses.
110 lines (73 loc) • 4.25 kB
Markdown
<h1 align="center">
/wdio-harness
</h1>
<p align="center">
<i>🔬 <a href="https://webdriver.io" alt="wdio">WebdriverIO</a> support for Angular component test harnesses.</i><br/>
</p>
<p align="center">
<a href="https://www.npmjs.com/package/@badisi/wdio-harness">
<img src="https://img.shields.io/npm/v/@badisi/wdio-harness.svg?color=blue&logo=npm" alt="npm version" /></a>
<a href="https://npmcharts.com/compare/@badisi/wdio-harness?minimal=true">
<img src="https://img.shields.io/npm/dw/@badisi/wdio-harness.svg?color=7986CB&logo=npm" alt="npm donwloads" /></a>
<a href="https://github.com/badisi/wdio-harness/blob/main/LICENSE">
<img src="https://img.shields.io/npm/l/@badisi/wdio-harness.svg?color=ff69b4" alt="license" /></a>
</p>
<p align="center">
<a href="https://github.com/Badisi/wdio-harness/actions/workflows/ci_tests.yml">
<img src="https://github.com/Badisi/wdio-harness/actions/workflows/ci_tests.yml/badge.svg" alt="build status" /></a>
<a href="https://github.com/badisi/wdio-harness/blob/main/CONTRIBUTING.md#-submitting-a-pull-request-pr">
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs welcome" /></a>
</p>
<hr/>
#### Component test harnesses
> A component harness is a class that lets a test interact with a component via a supported API. Each harness's API interacts with a component the same way a user would. By using the harness API, a test insulates itself against updates to the internals of a component, such as changing its DOM structure. The idea for component harnesses comes from the [PageObject](https://martinfowler.com/bliki/PageObject.html) pattern commonly used for integration testing.
[More info](https://material.angular.io/cdk/test-harnesses/overview)
<hr/>
## Installation
```sh
npm install /wdio-harness --save-dev
```
```sh
yarn add /wdio-harness --dev
```
## Usage
__Methods__
- `createHarnessEnvironment(rootElement)` - gets a HarnessLoader instance from a given element (defaults to body)
- `getHarness(harnessType, element)` - searches for an harness instance from a given ComponentHarness class and element
- `getHarness(harnessType)` - searches for an harness instance from a given ComponentHarness class
- `getHarness(query)` - searches for an harness instance from a given HarnessPredicate
- `getAllHarnesses(query)` - acts like getHarness, but returns an array of harness instances
- `waitForAngular()` - waits for Angular to finish bootstrapping
__Example__
```ts
import { MatDatepickerInputHarness } from '/material/datepicker/testing';
import { getHarness } from '/wdio-harness';
describe('Angular Material Harness', () => {
beforeEach(async () => {
await browser.url('http://localhost:4200');
});
it('MatDatePicker', async () => {
const datepicker = await getHarness(MatDatepickerInputHarness.with({ selector: '#demo-datepicker-input' }));
await datepicker.setValue('9/27/1954');
expect(await datepicker.getValue()).withContext('Date should be 9/27/1954').toBe('9/27/1954');
await datepicker.openCalendar();
const calendar = await datepicker.getCalendar();
await calendar.next();
await calendar.selectCell({ text: '20' });
expect(await datepicker.getValue()).withContext('Date should be 10/20/1954').toBe('10/20/1954');
});
});
```
More examples [here][examples].
## Development
See the [developer docs][developer].
## Contributing
#### > Want to Help ?
Want to file a bug, contribute some code or improve documentation ? Excellent!
But please read up first on the guidelines for [contributing][contributing], and learn about submission process, coding rules and more.
#### > Code of Conduct
Please read and follow the [Code of Conduct][codeofconduct] and help me keep this project open and inclusive.
[developer]: https://github.com/badisi/wdio-harness/blob/main/DEVELOPER.md
[contributing]: https://github.com/badisi/wdio-harness/blob/main/CONTRIBUTING.md
[codeofconduct]: https://github.com/badisi/wdio-harness/blob/main/CODE_OF_CONDUCT.md
[examples]: https://github.com/badisi/wdio-harness/blob/main/projects/tests-e2e/harness.e2e.ts