3.22.4 ā€¢ Published 2 days ago

@serenity-js/webdriverio v3.22.4

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
2 days ago

Serenity/JS

Follow Serenity/JS on LinkedIn Watch Serenity/JS on YouTube Join Serenity/JS Community Chat Support Serenity/JS on GitHub

Serenity/JS is an innovative open-source framework designed to make acceptance and regression testing of complex software systems faster, more collaborative and easier to scale.

ā­ļø Get started with Serenity/JS!

šŸ‘‹ Join the Serenity/JS Community!

Serenity/JS WebdriverIO

@serenity-js/webdriverio module is a Screenplay Pattern-style adapter for WebdriverIO that will help you with testing Web and mobile apps.

Installation

To install this module, use an existing WebdriverIO project or generate a new one by running:

npm init wdio .

Install the below Serenity/JS modules in your WebdriverIO project directory:

npm install --save-dev @serenity-js/assertions @serenity-js/console-reporter @serenity-js/core @serenity-js/serenity-bdd @serenity-js/web @serenity-js/webdriverio

To learn more about Serenity/JS and how to use it on your project, follow the Serenity/JS Getting Started guide fpr WebdriverIO.

Usage with Cucumber.js

To use Serenity/JS WebdriverIO with Cucumber.js, install the following adapter:

npm install --save-dev @serenity-js/cucumber

Please note that Serenity/JS WebdriverIO / Cucumber integration supports both Serenity/JS reporting services and native Cucumber.js reporters.

Usage with Jasmine

To use Serenity/JS WebdriverIO with Jasmine, install the following adapter:

npm install --save-dev @serenity-js/jasmine

Usage with Mocha

To use Serenity/JS WebdriverIO with Mocha, install the following adapter:

npm install --save-dev @serenity-js/mocha

Configuring WebdriverIO

To integrate Serenity/JS with WebdriverIO, configure your wdio.conf.ts to specify framework: '@serenity-js/webdriverio'. You can configure Serenity/JS in the same file.

// wdio.conf.ts
import { WebdriverIOConfig } from '@serenity-js/webdriverio'

// Optional, import custom Actors if needed; More on this below.
import { Actors } from './serenity/Actors.ts'

export const config: WebdriverIOConfig = {
    
    // Tell WebdriverIO to use Serenity/JS framework
    framework: '@serenity-js/webdriverio',

    // Serenity/JS configuration
    serenity: {
        // Configure Serenity/JS to use an appropriate test runner adapter
        runner: 'cucumber',
        // runner: 'mocha',
        // runner: 'jasmine',

        // Optional, register custom Cast to configure your Serenity/JS actors
        actors: new Actors(`https://api.example.org`),
        
        // Register Serenity/JS reporting services, a.k.a. the "stage crew"
        crew: [
            '@serenity-js/console-reporter',
            '@serenity-js/serenity-bdd',
            [ '@serenity-js/core:ArtifactArchiver', { outputDirectory: 'target/site/serenity' } ],
            [ '@serenity-js/web:Photographer', { 
                strategy: 'TakePhotosOfFailures', // or: 'TakePhotosOfInteractions'
            } ],
        ]
    },

    // configure Cucumber runner
    cucumberOpts: {
        // see the Cucumber configuration options below
    },

    // or Jasmine runner
    jasmineOpts: {
        // see the Jasmine configuration options below
    },

    // or Mocha runner
    mochaOpts: {
        // see the Mocha configuration options below
    },

    specs: [
        // load Cucumber feature files
        './features/**/*.feature',
        // or Mocha/Jasmine spec files 
        // './spec/**/*.spec.ts',
    ],
    
    // add any additional native WebdriverIO reports
    // reporters: [
    //     'spec',
    // ],

    // ... other WebdriverIO-specific configuration   
}

Learn more about:

Using custom Serenity/JS Actors

By default, Serenity/JS uses a default cast of actors where every actor can:

If you're planning to implement scenarios where actors have additional abilities, you can replace this default setup with a custom Cast, like this one:

// serenity/Actors.ts
import { Actor, Cast, TakeNotes } from '@serenity-js/core'
import { CallAnApi } from '@serenity-js/rest'
import { BrowseTheWebWithWebdriverIO } from '@serenity-js/webdriverio'
import type { Browser } from 'webdriverio'

export class Actors implements Cast {

    // Inject custom parameters via constructor
    constructor(private readonly apiUrl: string) {
    }
    
    prepare(actor: Actor): Actor {
        // You can assign abilities based on actor name, env variables, and so on
        switch (actor.name) {
            
            case 'Apisitt':
                return actor.whoCan(
                    CallAnApi.at(this.apiUrl)
                )
                
            default:
                return actor.whoCan(
                    BrowseTheWebWithWebdriverIO.using(browser), // global WDIO browser
                    TakeNotes.usingAnEmptyNotepad(),
                )
        }

    }
}

Using Serenity/JS with WebdriverIO and Mocha

// specs/example.spec.ts
import { actorCalled } from '@serenity-js/core'
import { Ensure, equals } from '@serenity-js/assertions'
import { By, Navigate, PageElement, Text } from '@serenity-js/web'
import { BrowseTheWebWithWebdriverIO } from '@serenity-js/webdriverio'

// example Lean Page Object describing a widget we interact with in the test
class SerenityJSWebsite {
    static header = () =>
        PageElement.located(By.css('h1'))   // selector to identify the interactable element
            .describedAs('header')          // description to be used in reports
}

describe('Serenity/JS', () => {
    
    it('works with WebdriverIO and Mocha', async () => {
        // actorCalled(name) instantiates or retrieves an existing actor identified by name
        // Actors class configures the actors to use WebdriverIO 
        await actorCalled('Wendy')
            .attemptsTo(
                Navigate.to('https://serenity-js.org'),
                Ensure.that(
                    Text.of(SerenityJSWebsite.header()),
                    equals('Enable collaborative test automation at any scale!')
                ),
            )
    })
})

To learn more, check out the example projects.

Template Repositories

The easiest way for you to start writing web-based acceptance tests using Serenity/JS, WebdriverIO and either Mocha, Cucumber or Jasmine is by using one of the below template repositories:

šŸ“£ Stay up to date

New features, tutorials, and demos are coming soon! Follow Serenity/JS on LinkedIn, subscribe to Serenity/JS channel on YouTube and join the Serenity/JS Community Chat to stay up to date! Please also make sure to star ā­ļø Serenity/JS on GitHub to help others discover the framework!

Follow Serenity/JS on LinkedIn Watch Serenity/JS on YouTube Join Serenity/JS Community Chat GitHub stars

šŸ’› Support Serenity/JS

If you appreciate all the effort that goes into making sophisticated tools easy to work with, please support our work and become a Serenity/JS GitHub Sponsor today!

GitHub Sponsors

3.22.4

2 days ago

3.22.3

8 days ago

3.22.2

19 days ago

3.22.1

23 days ago

3.22.0

28 days ago

3.21.2

1 month ago

3.21.1

2 months ago

3.21.0

2 months ago

3.20.0

2 months ago

3.19.0

2 months ago

3.18.1

3 months ago

3.18.0

3 months ago

3.17.0

3 months ago

3.16.2

3 months ago

3.16.1

3 months ago

3.16.0

3 months ago

3.15.1

4 months ago

3.15.0

4 months ago

3.14.2

5 months ago

3.14.1

5 months ago

3.13.2

6 months ago

3.13.1

6 months ago

3.13.3

6 months ago

3.7.2

10 months ago

3.6.1

10 months ago

3.6.0

10 months ago

3.12.0

7 months ago

3.14.0

5 months ago

3.10.4

8 months ago

3.13.0

7 months ago

3.5.0

10 months ago

3.9.1

9 months ago

3.9.0

9 months ago

3.10.1

8 months ago

3.8.0

9 months ago

3.10.0

9 months ago

3.10.3

8 months ago

3.4.2

10 months ago

3.10.2

8 months ago

3.11.0

7 months ago

3.7.1

10 months ago

3.7.0

10 months ago

3.11.1

7 months ago

3.4.0

11 months ago

3.2.1

12 months ago

3.2.0

1 year ago

3.4.1

11 months ago

3.3.1

11 months ago

3.3.0

11 months ago

3.0.1

1 year ago

3.0.0

1 year ago

3.0.0-rc.45

1 year ago

3.0.0-rc.44

1 year ago

3.0.0-rc.43

1 year ago

3.1.3

1 year ago

3.1.2

1 year ago

3.1.1

1 year ago

3.1.0

1 year ago

3.1.6

1 year ago

3.1.5

1 year ago

3.1.4

1 year ago

3.0.0-rc.42

1 year ago

3.0.0-rc.41

1 year ago

3.0.0-rc.37

1 year ago

3.0.0-rc.39

1 year ago

3.0.0-rc.38

1 year ago

3.0.0-rc.40

1 year ago

3.0.0-rc.28

2 years ago

3.0.0-rc.29

2 years ago

3.0.0-rc.35

1 year ago

3.0.0-rc.34

1 year ago

3.0.0-rc.36

1 year ago

3.0.0-rc.31

2 years ago

3.0.0-rc.30

2 years ago

3.0.0-rc.33

2 years ago

3.0.0-rc.32

2 years ago

3.0.0-rc.27

2 years ago

3.0.0-rc.24

2 years ago

3.0.0-rc.23

2 years ago

3.0.0-rc.26

2 years ago

3.0.0-rc.25

2 years ago

3.0.0-rc.20

2 years ago

3.0.0-rc.22

2 years ago

3.0.0-rc.21

2 years ago

2.33.10

2 years ago

3.0.0-rc.17

2 years ago

3.0.0-rc.19

2 years ago

3.0.0-rc.18

2 years ago

2.33.7

2 years ago

2.33.9

2 years ago

2.33.8

2 years ago

3.0.0-rc.15

2 years ago

3.0.0-rc.16

2 years ago

2.33.6

2 years ago

2.33.5

2 years ago

3.0.0-rc.14

2 years ago

2.33.4

2 years ago

2.33.3

2 years ago

3.0.0-rc.13

2 years ago

2.33.1

2 years ago

2.33.0

2 years ago

3.0.0-rc.12

2 years ago

2.32.7

2 years ago

3.0.0-rc.6

2 years ago

2.33.2

2 years ago

3.0.0-rc.5

2 years ago

3.0.0-rc.11

2 years ago

2.32.6

2 years ago

3.0.0-rc.4

2 years ago

3.0.0-rc.10

2 years ago

3.0.0-rc.9

2 years ago

3.0.0-rc.8

2 years ago

3.0.0-rc.7

2 years ago

3.0.0-rc.2

2 years ago

3.0.0-rc.1

2 years ago

3.0.0-rc.0

2 years ago

2.32.4

2 years ago

3.0.0-rc.3

2 years ago

2.32.5

2 years ago

2.32.3

3 years ago

2.32.2

3 years ago

2.32.1

3 years ago

2.32.0

3 years ago

2.31.1

3 years ago

2.31.0

3 years ago

2.30.3

3 years ago

2.30.2

3 years ago

2.30.1

3 years ago

2.30.0

3 years ago