3.22.4 ā€¢ Published 2 days ago

@serenity-js/playwright 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 Playwright

@serenity-js/playwright module is a Screenplay Pattern-style adapter for Playwright, that helps with testing Web-based apps.

Installation

To install this module, run the following command in your Playwright 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/playwright

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

Usage with @playwright/test

Follow the Serenity/JS Getting Started guide for Playwright Test.

Usage with Cucumber

Follow the Serenity/JS configuration guide for Cucumber and review the Serenity/JS Cucumber and Playwright Project Template.

Usage with Mocha

import { Ensure, equals } from '@serenity-js/assertions'
import { actorCalled, Actor, Cast, configure, Duration } from '@serenity-js/core'
import { BrowseTheWebWithPlaywright, PlaywrightOptions } from '@serenity-js/playwright'
import { By, Navigate, PageElement, TakePhotosOfFailures, Text } from '@serenity-js/web'

import { describe, it, beforeAll, afterAll } from 'mocha'
import * as playwright from 'playwright'

// 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
}

// example Actors class, confgures Serenity/JS actors to use Playwright
class Actors implements Cast {              
    constructor(                            
        private readonly browser: playwright.Browser,
        private readonly options: PlaywrightOptions,
    ) {
    }

    prepare(actor: Actor): Actor {
        return actor.whoCan(
            BrowseTheWebWithPlaywright.using(this.browser, this.options),
            // ... add other abilities as needed, like CallAnApi or TakeNotes
        )
    }
}

describe('Serenity/JS', () => {

    let browser: playwright.Browser
    
    beforeAll(async () => {
        // Start a single browser before all the tests,
        // Serenity/JS will open new tabs
        // and manage Playwright browser context as needed  
        browser = await playwright.chromium.launch({
            headless: true
        })

        // Configure Serenity/JS providing your Actors
        // and required "stage crew memebers" (a.k.a. reporting services)
        configure({
            actors: new Actors(browser, {
                    baseURL: `https://serenity-js.org`,
                    defaultNavigationTimeout:   Duration.ofSeconds(2).inMilliseconds(),
                    defaultTimeout:             Duration.ofMilliseconds(750).inMilliseconds(),
            }),
            crew: [
                [ '@serenity-js/console-reporter', { theme: 'auto' } ],
                [ '@serenity-js/core:ArtifactArchiver', { outputDirectory: 'target/site/serenity' } ],
                [ '@serenity-js/web:Photographer', {
                    strategy: 'TakePhotosOfFailures',
                    // strategy: 'TakePhotosOfInteractions',
                } ],
                [ '@serenity-js/serenity-bdd', { specDirectory: 'spec' } ],
            ]
        })
    })
    
    it('supports Playwright', async () => {
        // actorCalled(name) instantiates or retrieves an existing actor identified by name
        // Actors class configures the actors to use Playwright 
        await actorCalled('William')                                
            .attemptsTo(
                Navigate.to('https://serenity-js.org'),
                Ensure.that(
                    Text.of(SerenityJSWebsite.header()),
                    equals('Next generation acceptance testing')
                ),
            )
    })

    afterAll(async () => {
        // Close the browser after all the tests are finished
        if (browser) {
            await browser.close()
        }
    })
})

Next steps:

šŸ“£ 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.9.1

9 months ago

3.13.3

6 months ago

3.9.0

9 months ago

3.7.2

10 months ago

3.10.1

8 months ago

3.8.0

9 months ago

3.10.0

9 months ago

3.6.1

10 months ago

3.10.3

8 months ago

3.6.0

10 months ago

3.4.2

10 months ago

3.12.0

7 months ago

3.10.2

8 months ago

3.14.0

5 months ago

3.10.4

8 months ago

3.11.0

7 months ago

3.7.1

10 months ago

3.7.0

10 months ago

3.13.0

7 months ago

3.11.1

7 months ago

3.5.0

10 months ago

3.4.0

11 months ago

3.3.1

11 months ago

3.3.0

11 months ago

3.2.1

12 months ago

3.2.0

1 year ago

3.4.1

11 months 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.0.1

1 year ago

3.1.6

1 year ago

3.1.5

1 year ago

3.0.0

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.35

1 year ago

3.0.0-rc.34

1 year ago

3.0.0-rc.36

1 year ago

3.0.0-rc.28

2 years ago

3.0.0-rc.29

2 years 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.26

2 years ago

3.0.0-rc.25

2 years ago

3.0.0-rc.24

2 years ago

3.0.0-rc.23

2 years ago

3.0.0-rc.22

2 years ago

3.0.0-rc.21

2 years ago

3.0.0-rc.20

2 years ago