How to add a new page object?

Sylius uses a solution inspired by SensioLabs/PageObjectExtension, which provides an infrastructure to create pages that encapsulates all the user interface manipulation in page objects.

To create a new page object it is needed to add a service in Behat container in etc/behat/services/pages.xml file:

<service id="" class="" parent="sylius.behat.symfony_page" public="false" />


There are some boilerplates for common pages, which you may use. The available parents are (FriendsOfBehat\PageObjectExtension\Page\Page) and sylius.behat.symfony_page (FriendsOfBehat\PageObjectExtension\Page\SymfonyPage). It is not required for a page to extend any class as pages are POPOs (Plain Old PHP Objects).

Then you will need to add that service as a regular argument in context service.

The simplest Symfony-based page looks like:

use FriendsOfBehat\PageObjectExtension\Page\SymfonyPage;

class LoginPage extends SymfonyPage
    public function getRouteName(): string
        return 'sylius_user_security_login';