First, the library should be exported into an empty automation project by using:
mvn clean package -DbuildDirectory=directory/to/project/libFor instance:
mvn clean package -DbuildDirectory=/Users/Umut/Github/Web-Automation-Sample-Cucumber/libThere, the imported jar file should be added as a dependency in pom.xml file of that project:
<!-- Framework -->
<dependency>
<groupId>bora</groupId>
<artifactId>POM-Framework-0.0.2.jar</artifactId>
<version>0.0.2</version>
<systemPath>${project.basedir}/lib/POM-FRAMEWORK-0.0.2.jar</systemPath>
<scope>system</scope>
<type>jar</type>
</dependency>After updating your project, the quickstart library is ready to use.
The quickstart library consists of many utility methods and a ready to use built in selenium grid infrastructure, compatible with page object model design. The infrastructure allows easy initialization of elements by initializing them within a constructor inside the Utilities class. In order to initialize elements inside a page class, all it takes is to extend the Utilities class. This also extends the Driver class, allowing usage of driver inside page classes.
Create page classes, add elements (use @FindBy annotation) & page methods. Remember extending Utilities class, initializing all elements within the page class.
public class HomePage extends Utilities {...}
Create page step classes, instantiate page classes, create step definitions & access page methods within these step definitions as:
public class HomePageSteps { HomePage homePage = new HomePage(); @Given("Click category card named {}") public void clickCategoryCard(String cardName) { homePage.clickCategoryCardNamed(cardName); } }Set cucumber @Before & @After steps as:
Initialize driverManager = new Initialize(); @Before public void start(){driverManager.init();} @After public void kill(Scenario scenario){driverManager.kill(scenario);}This will initialize the driver before each run, and kill it after each scenario is done. It will also capture a ss if the scenario fails, indicating scenario name and failed step info.
Create .feature files, create your scenarios using the steps you have implemented in Step 2.
Selenium Grid needs to be running first, turn on Docker, then in project directory start Selenium Grid & Nodes by using the following command:
docker-compose up -dAlternatively, set selenium.grid property to false in test properties, that way the tests will run locally
The library allows the browser type to be designated on runtime, just pass:
-Dbrowser=browserNameFor instance:
-Dbrowser=firefoxChrome, Firefox, Opera, Edge & Safari are supported. In order to use this feature, please add the following plugin & property to your pom.xml:
<properties>
<browser>Chrome</browser>
<name>${project.name}</name>
</properties> <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>write-project-properties</goal>
</goals>
<configuration>
<outputFile>${project.build.outputDirectory}/properties-from-pom.properties</outputFile>
</configuration>
</execution>
</executions>
</plugin>It is recommended to use Cucumber JVM Parallel Plugin which allows you to execute tests simultaneously on parallel. If you would like to do that, add plugin:
<plugin>
<groupId>com.github.temyers</groupId>
<artifactId>cucumber-jvm-parallel-plugin</artifactId>
<version>4.2.0</version>
<executions>
<execution>
<id>generateRunners</id>
<phase>generate-test-sources</phase>
<goals>
<goal>generateRunners</goal>
</goals>
<configuration>
<glue>steps</glue>
<featuresDirectory>src/test/java/features</featuresDirectory>
<cucumberOutputDir>target/cucumber-parallel</cucumberOutputDir>
<plugins>
<plugin>
<name>testng</name>
</plugin>
</plugins>
<monochrome>false</monochrome>
<useTestNG>true</useTestNG>
<namingScheme>simple</namingScheme>
<!-- The class naming pattern to use. Only required/used if naming scheme is 'pattern'.-->
<namingPattern>Parallel{c}IT</namingPattern>
<!-- One of [SCENARIO, FEATURE]. SCENARIO generates one runner per scenario. FEATURE generates a runner per feature. -->
<parallelScheme>SCENARIO</parallelScheme>
</configuration>
</execution>
</executions>
</plugin>
<!-- Maven Surefire Plugin (This generates runner classes using the automatically generated test suites [.xml files]) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.version}</version>
<configuration>
<parallel>methods</parallel>
<useUnlimitedThreads>true</useUnlimitedThreads>
<forkCount>10</forkCount>
<reuseForks>true</reuseForks>
<includes>
<include>**/Parallel*IT.class</include>
</includes>
</configuration>
</plugin>In order to execute a specific feature file in a specific browser, add tags to the first line of your feature file & use:
mvn clean test -Dcucumber.options="--tags @DemoQA" -Dbrowser=chrome
mvn archetype:generate \ "-DarchetypeGroupId=io.cucumber" \ "-DarchetypeArtifactId=cucumber-archetype" \ "-DarchetypeVersion=6.10.4" \ "-DgroupId=hellocucumber" \ "-DartifactId=hellocucumber" \ "-Dpackage=hellocucumber" \ "-Dversion=1.0.0-SNAPSHOT" \ "-DinteractiveMode=false"