# Gmail Service

> wdio-gmail-service is a 3rd party package, for more information please see [GitHub](https://github.com/webdriverio-community/wdio-gmail-service) | [npm](https://www.npmjs.com/package/wdio-gmail-service)

A WebdriverIO plugin to fetch e-mails from Google Mail using [Gmail Tester](https://github.com/levz0r/gmail-tester).

## Installation[​](#installation "Direct link to Installation")

The easiest way is to keep `wdio-gmail-service` as a `devDependency` in your package.json.

```
{
  "devDependencies": {
    "wdio-gmail-service": "^2.0.0"
  }
}
```

You can simply do it by:

```
npm install wdio-gmail-service --save-dev
```

## Usage[​](#usage "Direct link to Usage")

### Gmail Authentication[​](#gmail-authentication "Direct link to Gmail Authentication")

You'll need to follow the instructions at [Gmail Tester](https://github.com/levz0r/gmail-tester) to create the `credentials.json` (the OAuth2 Authentication file) and `token.json` (the OAuth2 token).

### Configuration[​](#configuration "Direct link to Configuration")

Add the service by adding `gmail` to the service list, e.g.:

```
// wdio.conf.js
import path from 'path'

export const config = {
    // ...
    services: [['gmail', {
        credentials: path.join(process.cwd(), './credentials.json'),
        token: join(process.cwd(), './token.json'),
        intervalSec: 10,
        timeoutSec: 60
    }]]
    // ...
};
```

## Service Options[​](#service-options "Direct link to Service Options")

### credentials[​](#credentials "Direct link to credentials")

Absolute path to a credentials JSON file.

Type: `string | Credentials`

Required: `true`

### token[​](#token "Direct link to token")

Absolute path to a token JSON file.

Type: `string | Record<string, unknown>`

Required: `true`

### intervalSec[​](#intervalsec "Direct link to intervalSec")

The interval between Gmail inbox checks.

Type: `number`

Default: `10`

Required: `false`

### timeoutSec[​](#timeoutsec "Direct link to timeoutSec")

The maximum time to wait for finding the email for the given filters.

Type: `number`

Default: `60`

Required: `false`

## Writing tests[​](#writing-tests "Direct link to Writing tests")

In your WebdriverIO test, you can now check if an email was received.

```
describe('Example', () => {
    it('Should check email', () => {
        // perform some actions that will send an email to setup gmail account
        const emails = await browser.checkInbox({ from: 'AccountSupport@ubi.com', subject: 'Ubisoft Password Change Request' });
        expect(emails[0].body.html).toContain('https://account-uplay.ubi.com/en-GB/action/change-password?genomeid=')
    })
})
```

## `checkInbox` parameters[​](#checkinbox-parameters "Direct link to checkinbox-parameters")

The command parameters require at least one of `from`, `to`, or `subject`:

### `from`[​](#from "Direct link to from")

Filter on the email address of the receiver.

Type: `String`

### `to`[​](#to "Direct link to to")

Filter on the email address of the sender.

Type: `String`

### `subject`[​](#subject "Direct link to subject")

Filter on the subject of the email.

Type: `String`

### `includeBody`[​](#includebody "Direct link to includebody")

Set to true to fetch decoded email bodies.

Type: `boolean`

### `includeAttachments`[​](#includeattachments "Direct link to includeattachments")

Set to true to fetch the base64-encoded email attachments.

Type: `boolean`

### `before`[​](#before "Direct link to before")

Filter messages received before the specified date.

Type: `Date`

### `after`[​](#after "Direct link to after")

Filter messages received after the specified date.

Type: `Date`

### `label`[​](#label "Direct link to label")

The default label is 'INBOX', but can be changed to 'SPAM', 'TRASH' or a custom label. For a full list of built-in labels, see <https://developers.google.com/gmail/api/guides/labels?hl=en>

Type: `String`

***

For more information on WebdriverIO see the [homepage](https://webdriver.io).
