Best Practices for Writing Acceptance Tests

Use prepared methods from StrictWebDriver that are available via AcceptanceTester

We have prepared many useful methods like fillFieldByName that actually do multiple actions to improve acceptance tests dependability. These methods find the element on the page, scroll to it, move mouse over it and then do appropriate action. They are intended to imitate human behaviour as much as possible.

Separate common behaviour to page objects

Use page object that extends from AbstractPage for common actions. For example: we do test login in several tests. Without LoginPage its logic would be duplicated in several tests, and it would be much harder to maintain any changes.

Use test prefix for CSS classes

Test prefix helps to differentiate common CSS classes used by frontend developers from those used for tests, so they are not accidentally removed during design changes.

Use translations for testing text appearance

Texts on a frontend can be changed from time to time or language can be changed during development. Such change would lead to many errors reported by acceptance tests. We are preventing such errors by using prepared methods in AcceptanceTester like seeTranslationFrontend or seeTranslationAdminInCss.

Use calculation of price by exchange rate for testing prices

Testing price is not common in acceptance tests, but it can be required from time to time. By default, there are several tests checking right price displayed in popup window after products is added to cart. As currency can be easily changed on a domain, we wanted to prevent error caused by such change. AcceptanceTester includes two useful methods getPriceWithVatConvertedToDomainDefaultCurrency and getFormattedPriceWithCurrencySymbolRoundedByCurrencyOnFrontend for such cases. See CartBoxPage to get some inspiration.