Remove the TestNG Selenium boilerplate.
- Overview
- Project Goals
- Maven Dependency
- Writing Suites
- Writing a Page Factory
- Writing a Page Object
- Configuring
- Configuration through Property Files, System properties and annotations.
- Facilitate running tests in parallel.
- Remove typical boilerplate, such as taking screenshots on test failures, configuring WebDriver, and instantiating page objects.
- Declarative way of defining page objects with PageFactory.
- Declarative way of configuring tests individually.
TestNG-Selenium
to your existing project as follows:
For new projects, you can quickly get setup by using the following command at a terminal:
```shell mvn archetype:generate \ -DarchetypeGroupId=com.github.jsdevel \ -DarchetypeArtifactId=testng-selenium-archetype ``` In each of your suite classes, extend
AbstractSuite
and pass
your PageFactory as a generic type argument.
AbstractSuite
provides a getPageFactory
method to create the page factories passed in as generic type arguments. In
this example, the page factory passed as a generic type on line 7 is
returned by getPageFactory
.
A PageFactory is nothing more than an interface:
Each method declared in a
PageFactory
should return a sub class
of AbstractPage
. This allows TestNG-Selenium to do some cool things
when initializing your page objects, like navigating to them when
WebDriver
has been created, wiring up annotated fields using
Selenium's PageFactory initializer, and validating that the URL currently
being viewed by WebDriver is valid for the requested page. This approach
also allows you to avoid boilerplate by letting TestNG-Selenium manage your
page factory's lifecycle.
- Create a class I.E. GoogleHomePage
- Extend com.github.jsdevel.testng.selenium.AbstractPage.
- Pass your page object's type, and the page factory used to create it as generic type arguments to AbstractPage.
- Optionally add WebElement fields annotated with @FindBy (see Google's PageFactory pattern.).
If you need to do something before validation occurs, such as wait for requests, or poll a global javascript variable, you can override
AbstractPage#handlePageInitialized()
.
TestNG-Selenium may be configured in one of 3 ways:
- Properties File
- System Properties
- Annotations
Here is a list of the system properties recognized by TestNG-Selenium with their default values:
Annotation based configuration can override the default configuration, properties file annotation, and system based configuration for a single test run.
Here is an example of how we can override a system property using an annotation for a single test run. For the full list of supported annotations, see package contents under com.github.jsdevel.annotations.