<div class="selenium-notes">
<h1>Maven Project</h1>
<p>Maven is a powerful build automation and project management tool commonly used for Java-based applications and Selenium automation frameworks. In Selenium projects, Maven helps developers and testers manage dependencies, maintain a standard project structure, compile source code, execute automated tests, generate test reports, and integrate the automation framework with CI/CD tools.</p>
<p>A Maven project is primarily controlled through a <strong>pom.xml</strong> file, known as the Project Object Model. The POM defines project information, dependencies, plugins, build configuration, properties, and other settings required to build and execute the project.</p>
<p><strong>Course Resource:</strong> <a href="https://www.justacademy.co/course-detail/selenium-training" target="_blank" rel="noopener noreferrer">Selenium Training</a> | <a href="https://www.justacademy.co/register-for-course-demo" target="_blank" rel="noopener noreferrer">Register for Course Demo</a></p>
<hr>
<h2>1. What is Maven?</h2>
<p>Maven is an open-source build automation and dependency management tool primarily used for Java projects. It follows conventions and a standard project structure so that developers and testers can work with consistent project layouts.</p>
<p>Instead of manually downloading JAR files, configuring classpaths, compiling code, and managing libraries, Maven can perform these tasks using configuration in the <strong>pom.xml</strong> file.</p>
<h3>Simple Maven Concept</h3>
<pre><code>Project
|
+-- pom.xml
|
+-- Dependencies
|
+-- Source Code
|
+-- Test Code
|
+-- Maven Plugins
|
+-- Build Lifecycle
|
+-- Test Execution
|
+-- Reports / Artifacts</code></pre>
<hr>
<h2>2. Why Maven is Used in Selenium?</h2>
<p>Maven is widely used in Selenium automation projects because Selenium frameworks normally require several external libraries such as Selenium WebDriver, TestNG or JUnit, reporting libraries, logging libraries, and additional utilities.</p>
<ul>
<li>Automatically manages Selenium dependencies.</li>
<li>Maintains a standard project structure.</li>
<li>Downloads required JAR files automatically.</li>
<li>Manages dependency versions.</li>
<li>Supports TestNG and JUnit.</li>
<li>Provides standard build commands.</li>
<li>Supports automated test execution.</li>
<li>Can generate build and test artifacts.</li>
<li>Works well with Jenkins and other CI/CD systems.</li>
<li>Supports multi-module projects.</li>
<li>Makes projects easier to share and maintain.</li>
</ul>
<hr>
<h2>3. Maven vs Manual JAR Management</h2>
<table border="1" cellpadding="8" cellspacing="0">
<tr><th>Manual JAR Management</th><th>Maven</th></tr>
<tr><td>JAR files are downloaded manually.</td><td>Dependencies are declared in pom.xml.</td></tr>
<tr><td>Versions must be managed manually.</td><td>Maven manages dependency versions.</td></tr>
<tr><td>Classpath configuration can be difficult.</td><td>Maven handles dependency classpaths.</td></tr>
<tr><td>Project structure may differ between developers.</td><td>Standard project structure is encouraged.</td></tr>
<tr><td>Updating libraries can require manual replacement.</td><td>Change the dependency version in pom.xml.</td></tr>
<tr><td>CI setup can require additional configuration.</td><td>Maven commands can be executed easily in CI environments.</td></tr>
</table>
<hr>
<h2>4. What is POM?</h2>
<p>POM stands for <strong>Project Object Model</strong>. It is the central configuration file of a Maven project and is normally named <strong>pom.xml</strong>.</p>
<p>The POM contains project identity, dependencies, plugins, build configuration, properties, repositories, profiles, and other information Maven needs to build the project.</p>
<h3>Important POM Components</h3>
<ul>
<li>modelVersion</li>
<li>groupId</li>
<li>artifactId</li>
<li>version</li>
<li>packaging</li>
<li>properties</li>
<li>dependencies</li>
<li>dependencyManagement</li>
<li>build</li>
<li>plugins</li>
<li>profiles</li>
<li>repositories</li>
<li>parent</li>
</ul>
<hr>
<h2>5. Basic pom.xml Structure</h2>
<pre><code><project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>selenium-automation</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- Dependencies go here -->
</dependencies>
</project></code></pre>
<hr>
<h2>6. Maven Coordinates</h2>
<p>Maven identifies an artifact using coordinates. The three important coordinates are <strong>groupId</strong>, <strong>artifactId</strong>, and <strong>version</strong>.</p>
<table border="1" cellpadding="8" cellspacing="0">
<tr><th>Element</th><th>Purpose</th><th>Example</th></tr>
<tr><td>groupId</td><td>Identifies the organization or project group.</td><td>com.example</td></tr>
<tr><td>artifactId</td><td>Identifies the project or artifact.</td><td>selenium-automation</td></tr>
<tr><td>version</td><td>Identifies the project version.</td><td>1.0-SNAPSHOT</td></tr>
</table>
<p>The combination can be viewed as:</p>
<pre><code>groupId : artifactId : version
com.example : selenium-automation : 1.0-SNAPSHOT</code></pre>
<hr>
<h2>7. groupId</h2>
<p>The <strong>groupId</strong> identifies the organization, company, team, or logical group to which the project belongs.</p>
<pre><code><groupId>com.company.automation</groupId></code></pre>
<p>Organizations commonly use reverse-domain naming conventions such as <strong>com.company</strong> or <strong>org.example</strong>.</p>
<hr>
<h2>8. artifactId</h2>
<p>The <strong>artifactId</strong> identifies the project or generated artifact.</p>
<pre><code><artifactId>selenium-framework</artifactId></code></pre>
<p>Examples include:</p>
<ul>
<li>selenium-framework</li>
<li>web-automation</li>
<li>login-tests</li>
<li>ecommerce-automation</li>
</ul>
<hr>
<h2>9. version</h2>
<p>The <strong>version</strong> identifies the current version of the Maven project.</p>
<pre><code><version>1.0-SNAPSHOT</version></code></pre>
<p><strong>SNAPSHOT</strong> generally indicates a development version that is not considered a final release.</p>
<hr>
<h2>10. Packaging</h2>
<p>The <strong>packaging</strong> element specifies the type of artifact produced by the project.</p>
<pre><code><packaging>jar</packaging></code></pre>
<p>Common packaging values include:</p>
<table border="1" cellpadding="8" cellspacing="0">
<tr><th>Packaging</th><th>Purpose</th></tr>
<tr><td>jar</td><td>Creates a Java Archive.</td></tr>
<tr><td>war</td><td>Creates a Web Application Archive.</td></tr>
<tr><td>pom</td><td>Used for parent and aggregation projects.</td></tr>
</table>
<p>For a typical Selenium automation framework, <strong>jar</strong> packaging is commonly sufficient.</p>
<hr>
<h2>11. Maven Standard Project Structure</h2>
<p>Maven follows a standard directory structure. This convention makes projects easier to understand and maintain.</p>
<pre><code>selenium-automation/
|
|-- pom.xml
|
|-- src/
| |
| |-- main/
| | |
| | |-- java/
| | | |-- com/example/pages/
| | | |-- com/example/utils/
| | | |-- com/example/base/
| | |
| | |-- resources/
| |
| |-- test/
| |
| |-- java/
| | |-- com/example/tests/
| |
| |-- resources/
|
|-- target/</code></pre>
<hr>
<h2>12. Important Maven Directories</h2>
<table border="1" cellpadding="8" cellspacing="0">
<tr><th>Directory</th><th>Purpose</th></tr>
<tr><td>src/main/java</td><td>Main Java source code.</td></tr>
<tr><td>src/main/resources</td><td>Main configuration and resource files.</td></tr>
<tr><td>src/test/java</td><td>Test source code.</td></tr>
<tr><td>src/test/resources</td><td>Test-specific resources.</td></tr>
<tr><td>target</td><td>Generated build output.</td></tr>
<tr><td>pom.xml</td><td>Main Maven configuration file.</td></tr>
</table>
<hr>
<h2>13. Maven Project Flow</h2>
<pre><code>pom.xml
|
v
Read Project Configuration
|
v
Resolve Dependencies
|
v
Compile Source Code
|
v
Compile Test Code
|
v
Execute Tests
|
v
Generate Reports
|
v
Package / Verify
|
v
Install / Deploy</code></pre>
<hr>
<h2>14. Maven Dependencies</h2>
<p>A dependency is an external library required by a project. Selenium automation projects commonly require Selenium WebDriver and a test framework such as TestNG or JUnit.</p>
<p>Maven downloads declared dependencies from configured repositories and makes them available to the project.</p>
<h3>Dependency Structure</h3>
<pre><code><dependency>
<groupId>GROUP_ID</groupId>
<artifactId>ARTIFACT_ID</artifactId>
<version>VERSION</version>
</dependency></code></pre>
<hr>
<h2>15. Selenium Dependency</h2>
<p>A Selenium Maven project can declare Selenium WebDriver as a dependency in the POM.</p>
<pre><code><dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>YOUR_SELENIUM_VERSION</version>
</dependency></code></pre>
<p>Replace <strong>YOUR_SELENIUM_VERSION</strong> with the Selenium version selected for the project.</p>
<hr>
<h2>16. TestNG Dependency</h2>
<p>TestNG is frequently used with Selenium for test execution, annotations, assertions, grouping, parameterization, and test organization.</p>
<pre><code><dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>YOUR_TESTNG_VERSION</version>
<scope>test</scope>
</dependency></code></pre>
<hr>
<h2>17. JUnit Dependency</h2>
<p>JUnit can also be used as the test framework for a Maven-based Selenium project.</p>
<pre><code><dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>YOUR_JUNIT_VERSION</version>
<scope>test</scope>
</dependency></code></pre>
<hr>
<h2>18. Complete Example pom.xml for Selenium</h2>
<pre><code><project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>selenium-automation</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>YOUR_JAVA_VERSION</maven.compiler.source>
<maven.compiler.target>YOUR_JAVA_VERSION</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>YOUR_SELENIUM_VERSION</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>YOUR_TESTNG_VERSION</version>
<scope>test</scope>
</dependency>
</dependencies>
</project></code></pre>
<hr>
<h2>19. What is Dependency Scope?</h2>
<p>Dependency scope determines where and when a dependency is available during the Maven build lifecycle.</p>
<table border="1" cellpadding="8" cellspacing="0">
<tr><th>Scope</th><th>General Purpose</th></tr>
<tr><td>compile</td><td>Available during compilation and runtime; this is the default scope.</td></tr>
<tr><td>test</td><td>Available for compiling and running tests.</td></tr>
<tr><td>provided</td><td>Expected to be provided by the runtime environment.</td></tr>
<tr><td>runtime</td><td>Not required for compilation but required at runtime.</td></tr>
<tr><td>system</td><td>Uses a specified local path and is generally discouraged for normal dependency management.</td></tr>
</table>
<hr>
<h2>20. Transitive Dependencies</h2>
<p>Maven can automatically resolve dependencies required by another dependency. These are called <strong>transitive dependencies</strong>.</p>
<pre><code>Your Project
|
+-- Selenium
|
+-- Dependency A
|
+-- Dependency B
|
+-- Dependency C</code></pre>
<p>This means you normally do not need to manually declare every library that Selenium itself requires.</p>
<hr>
<h2>21. Maven Repositories</h2>
<p>Maven repositories store project artifacts and dependencies.</p>
<h3>Types of Repositories</h3>
<ul>
<li><strong>Local Repository:</strong> Stored on the developer's machine.</li>
<li><strong>Central Repository:</strong> Public repository used by Maven to retrieve many commonly used artifacts.</li>
<li><strong>Remote Repository:</strong> Organization-specific or third-party repository hosted remotely.</li>
</ul>
<hr>
<h2>22. Maven Local Repository</h2>
<p>Maven stores downloaded dependencies in a local repository so that they can be reused without downloading the same artifact repeatedly.</p>
<p>On many systems the default local repository is located under the user's Maven directory, commonly:</p>
<pre><code>~/.m2/repository</code></pre>
<p>On Windows it is commonly located under:</p>
<pre><code>C:\Users\USERNAME\.m2\repository</code></pre>
<hr>
<h2>23. Maven Build Lifecycle</h2>
<p>Maven uses predefined build lifecycles. The main built-in lifecycles are <strong>clean</strong>, <strong>default</strong>, and <strong>site</strong>.</p>
<table border="1" cellpadding="8" cellspacing="0">
<tr><th>Lifecycle</th><th>Purpose</th></tr>
<tr><td>clean</td><td>Removes generated build files.</td></tr>
<tr><td>default</td><td>Builds, tests, packages, verifies, installs, or deploys the project.</td></tr>
<tr><td>site</td><td>Generates project documentation/site information.</td></tr>
</table>
<hr>
<h2>24. Important Maven Lifecycle Phases</h2>
<table border="1" cellpadding="8" cellspacing="0">
<tr><th>Phase</th><th>Purpose</th></tr>
<tr><td>validate</td><td>Checks whether the project is correct.</td></tr>
<tr><td>compile</td><td>Compiles main source code.</td></tr>
<tr><td>test</td><td>Runs tests.</td></tr>
<tr><td>package</td><td>Packages compiled code into its distributable format.</td></tr>
<tr><td>verify</td><td>Performs checks on the package and test results.</td></tr>
<tr><td>install</td><td>Installs the package into the local repository.</td></tr>
<tr><td>deploy</td><td>Publishes the package to a remote repository.</td></tr>
</table>
<hr>
<h2>25. Maven Commands</h2>
<h3>Check Maven Version</h3>
<pre><code>mvn -version</code></pre>
<h3>Clean Project</h3>
<pre><code>mvn clean</code></pre>
<h3>Compile Project</h3>
<pre><code>mvn compile</code></pre>
<h3>Run Tests</h3>
<pre><code>mvn test</code></pre>
<h3>Package Project</h3>
<pre><code>mvn package</code></pre>
<h3>Verify Project</h3>
<pre><code>mvn verify</code></pre>
<h3>Install Project Locally</h3>
<pre><code>mvn install</code></pre>
<h3>Clean and Test</h3>
<pre><code>mvn clean test</code></pre>
<h3>Clean and Package</h3>
<pre><code>mvn clean package</code></pre>
<hr>
<h2>26. Maven Command Execution Flow</h2>
<pre><code>mvn clean test
|
+-- clean
| |
| +-- Removes target/
|
+-- test
|
+-- Validate
+-- Compile
+-- Test Compile
+-- Run Tests</code></pre>
<hr>
<h2>27. Maven Plugins</h2>
<p>Maven plugins provide the actual actions performed during the build lifecycle. Plugins can compile code, run tests, package applications, generate reports, and perform many other tasks.</p>
<p>Examples include compiler, Surefire, Failsafe, JAR, resources, and other Maven plugins.</p>
<hr>
<h2>28. Maven Surefire Plugin</h2>
<p>The Maven Surefire Plugin is commonly used to execute unit and test-framework tests during the Maven <strong>test</strong> phase.</p>
<p>For Selenium projects using TestNG or JUnit, Surefire can be configured to execute the required test classes or suites.</p>
<pre><code><build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>YOUR_PLUGIN_VERSION</version>
</plugin>
</plugins>
</build></code></pre>
<hr>
<h2>29. TestNG with Maven</h2>
<p>A Selenium TestNG framework can be integrated with Maven so that tests can be executed from the command line or a CI/CD server.</p>
<pre><code>mvn test</code></pre>
<p>The general flow is:</p>
<pre><code>pom.xml
|
v
TestNG Dependency
|
v
Test Classes
|
v
Surefire Plugin
|
v
mvn test
|
v
Test Execution
|
v
Test Reports</code></pre>
<hr>
<h2>30. TestNG XML Suite with Maven</h2>
<p>Large Selenium projects may use a TestNG XML suite to control which tests are executed.</p>
<pre><code><suite name="Selenium Suite">
<test name="Regression Tests">
<classes>
<class name="tests.LoginTest"/>
<class name="tests.SearchTest"/>
<class name="tests.CartTest"/>
</classes>
</test>
</suite></code></pre>
<p>The suite can then be connected to Maven through the appropriate test execution plugin configuration.</p>
<hr>
<h2>31. Maven Properties</h2>
<p>Properties allow reusable values to be declared in the POM. They are useful for managing Java versions, dependency versions, project settings, and other configuration values.</p>
<pre><code><properties>
<maven.compiler.source>YOUR_JAVA_VERSION</maven.compiler.source>
<maven.compiler.target>YOUR_JAVA_VERSION</maven.compiler.target>
<selenium.version>YOUR_SELENIUM_VERSION</selenium.version>
</properties></code></pre>
<hr>
<h2>32. Using Properties in Dependencies</h2>
<pre><code><dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium.version}</version>
</dependency></code></pre>
<p>This avoids repeating version values throughout the POM.</p>
<hr>
<h2>33. Dependency Management</h2>
<p>The <strong>dependencyManagement</strong> section can centralize dependency information, particularly in projects with multiple modules or a parent-child POM structure.</p>
<pre><code><dependencyManagement>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>YOUR_SELENIUM_VERSION</version>
</dependency>
</dependencies>
</dependencyManagement></code></pre>
<hr>
<h2>34. Maven Parent POM</h2>
<p>A parent POM allows common configuration to be shared across multiple Maven projects or modules.</p>
<pre><code><parent>
<groupId>com.example</groupId>
<artifactId>automation-parent</artifactId>
<version>1.0</version>
</parent></code></pre>
<p>Parent POMs are particularly useful for large automation frameworks containing multiple modules.</p>
<hr>
<h2>35. Multi-Module Maven Project</h2>
<p>A multi-module Maven project contains multiple related Maven projects managed through a parent project.</p>
<pre><code>automation-framework/
|
|-- pom.xml
|
|-- web-tests/
| |-- pom.xml
|
|-- api-tests/
| |-- pom.xml
|
|-- mobile-tests/
|-- pom.xml</code></pre>
<p>This structure allows teams to maintain multiple related automation modules under a common Maven project.</p>
<hr>
<h2>36. Maven Profiles</h2>
<p>Maven profiles allow different configurations to be activated for different environments or execution scenarios.</p>
<p>For example, a Selenium project may have separate configurations for:</p>
<ul>
<li>Chrome execution.</li>
<li>Firefox execution.</li>
<li>Local execution.</li>
<li>QA environment.</li>
<li>Staging environment.</li>
<li>Production-like test environment.</li>
</ul>
<h3>Example</h3>
<pre><code><profiles>
<profile>
<id>qa</id>
<properties>
<environment>qa</environment>
</properties>
</profile>
<profile>
<id>staging</id>
<properties>
<environment>staging</environment>
</properties>
</profile>
</profiles></code></pre>
<hr>
<h2>37. Running a Maven Profile</h2>
<pre><code>mvn test -Pqa</code></pre>
<p>Another example:</p>
<pre><code>mvn clean test -Pstaging</code></pre>
<hr>
<h2>38. Maven Clean and target Directory</h2>
<p>The <strong>target</strong> directory contains generated build output. Depending on the lifecycle and plugins used, it can contain compiled classes, test classes, reports, packaged artifacts, and other generated files.</p>
<p>The command below removes the target directory:</p>
<pre><code>mvn clean</code></pre>
<hr>
<h2>39. Maven Dependency Tree</h2>
<p>The dependency tree helps identify direct and transitive dependencies used by a Maven project.</p>
<pre><code>mvn dependency:tree</code></pre>
<p>This is useful when investigating dependency conflicts or unexpected library versions.</p>
<hr>
<h2>40. Maven Effective POM</h2>
<p>The effective POM represents the final Maven configuration after inheritance, defaults, profiles, and other POM information are taken into account.</p>
<pre><code>mvn help:effective-pom</code></pre>
<p>This command is useful when a project behaves differently from what the visible pom.xml appears to specify.</p>
<hr>
<h2>41. Selenium Maven Project Example</h2>
<p>A basic Selenium Maven project can contain a reusable base class, page classes, utility classes, and test classes.</p>
<pre><code>selenium-project/
|
|-- pom.xml
|
|-- src/test/java/
| |
| |-- base/
| | |-- BaseTest.java
| |
| |-- pages/
| | |-- LoginPage.java
| | |-- DashboardPage.java
| |
| |-- tests/
| |-- LoginTest.java
| |-- DashboardTest.java
|
|-- src/test/resources/
| |-- config.properties
|
|-- target/</code></pre>
<hr>
<h2>42. Selenium Base Test Class</h2>
<pre><code>package base;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class BaseTest {
protected WebDriver driver;
public void setUp() {
driver = new ChromeDriver();
driver.manage().window().maximize();
}
public void tearDown() {
if (driver != null) {
driver.quit();
}
}
}</code></pre>
<hr>
<h2>43. Selenium Page Object Example</h2>
<pre><code>package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class LoginPage {
private WebDriver driver;
private By username =
By.id("username");
private By password =
By.id("password");
private By loginButton =
By.id("login");
public LoginPage(WebDriver driver) {
this.driver = driver;
}
public void enterUsername(String value) {
driver.findElement(username).sendKeys(value);
}
public void enterPassword(String value) {
driver.findElement(password).sendKeys(value);
}
public void clickLogin() {
driver.findElement(loginButton).click();
}
}</code></pre>
<hr>
<h2>44. Selenium Test Class in Maven</h2>
<pre><code>package tests;
import org.testng.annotations.Test;
import base.BaseTest;
import pages.LoginPage;
public class LoginTest extends BaseTest {
@Test
public void validLoginTest() {
setUp();
try {
driver.get("https://example.com");
LoginPage loginPage =
new LoginPage(driver);
loginPage.enterUsername("testuser");
loginPage.enterPassword("password");
loginPage.clickLogin();
} finally {
tearDown();
}
}
}</code></pre>
<hr>
<h2>45. Maven with Page Object Model</h2>
<p>Maven and Page Object Model complement each other in Selenium automation frameworks.</p>
<pre><code>Selenium Framework
|
+-- Maven
| |
| +-- Dependencies
| +-- Build
| +-- Test Execution
|
+-- POM
| |
| +-- Page Classes
| +-- Locators
| +-- Page Methods
|
+-- TestNG/JUnit
|
+-- Test Cases
+-- Assertions
+-- Reports</code></pre>
<hr>
<h2>46. Maven in CI/CD</h2>
<p>Maven is particularly useful in CI/CD because automation servers can execute Maven commands without depending on an IDE.</p>
<pre><code>Developer
|
v
Git Repository
|
v
CI Server
|
v
mvn clean test
|
+-- Build
+-- Resolve Dependencies
+-- Execute Selenium Tests
+-- Generate Reports
|
v
Test Result</code></pre>
<hr>
<h2>47. Maven with Jenkins</h2>
<p>A Jenkins pipeline can execute Maven commands such as:</p>
<pre><code>mvn clean test</code></pre>
<p>A typical workflow is:</p>
<pre><code>Git Checkout
|
v
Maven Dependency Resolution
|
v
Compile
|
v
Execute Selenium Tests
|
v
Generate Reports
|
v
Publish Results</code></pre>
<hr>
<h2>48. Maven Wrapper</h2>
<p>Maven Wrapper allows a project to use a project-specific Maven distribution without requiring developers to manually install and configure Maven globally.</p>
<p>Typical wrapper files include:</p>
<pre><code>.mvn/
mvnw
mvnw.cmd</code></pre>
<p>On Windows, the wrapper can commonly be invoked with:</p>
<pre><code>mvnw.cmd test</code></pre>
<p>On Unix-like systems:</p>
<pre><code>./mvnw test</code></pre>
<hr>
<h2>49. Maven Offline Mode</h2>
<p>If all required dependencies are already available in the local repository, Maven can be run in offline mode.</p>
<pre><code>mvn -o test</code></pre>
<p>Offline mode is useful when network access is unavailable, provided all required artifacts have already been downloaded.</p>
<hr>
<h2>50. Skipping Tests</h2>
<p>Sometimes a project needs to be packaged without executing tests.</p>
<pre><code>mvn package -DskipTests</code></pre>
<p>This should be used carefully because skipping tests means the normal test execution step is not performed.</p>
<hr>
<h2>51. Common Maven Errors</h2>
<h3>Error 1: mvn Command Not Found</h3>
<p>This generally indicates that Maven is not installed or its executable is not correctly available through the system PATH.</p>
<h3>Error 2: Dependency Could Not Be Resolved</h3>
<p>This can happen because of an incorrect dependency coordinate, unavailable artifact, network problem, repository issue, or incompatible configuration.</p>
<h3>Error 3: Compilation Failure</h3>
<p>This indicates that Java source code or compiler configuration needs attention.</p>
<h3>Error 4: Test Failure</h3>
<p>The Maven build may reach the test phase successfully but one or more automated tests can fail.</p>
<hr>
<h2>52. Selenium Dependency Resolution Problems</h2>
<p>If Selenium classes cannot be imported, verify the following:</p>
<ul>
<li>Selenium dependency exists in pom.xml.</li>
<li>GroupId is correct.</li>
<li>ArtifactId is correct.</li>
<li>Version is valid.</li>
<li>Maven has network access when dependencies are not cached.</li>
<li>The IDE has reloaded the Maven project.</li>
<li>The local Maven repository is not corrupted.</li>
</ul>
<hr>
<h2>53. Maven Project Refresh in IDE</h2>
<p>After modifying pom.xml, the IDE should reload or synchronize the Maven project so that newly added dependencies and plugins become available.</p>
<p>In IntelliJ IDEA or Eclipse, use the IDE's Maven refresh/update functionality when necessary.</p>
<hr>
<h2>54. Maven Best Practices for Selenium</h2>
<ul>
<li>Keep dependencies explicitly versioned where appropriate.</li>
<li>Avoid unnecessary dependencies.</li>
<li>Use properties for commonly repeated versions.</li>
<li>Keep the POM readable.</li>
<li>Use the standard Maven directory structure.</li>
<li>Separate test code from application or framework code.</li>
<li>Use Page Object Model for maintainability.</li>
<li>Use a test framework such as TestNG or JUnit consistently.</li>
<li>Keep browser and environment configuration separate from test logic.</li>
<li>Use dependency:tree when investigating dependency conflicts.</li>
<li>Run clean builds regularly in CI.</li>
<li>Avoid hard-coded local file paths for dependencies.</li>
</ul>
<hr>
<h2>55. Common Mistakes in Maven Selenium Projects</h2>
<ul>
<li>Manually adding Selenium JAR files when Maven dependencies are already being used.</li>
<li>Using incompatible dependency versions.</li>
<li>Putting test classes in the wrong directory.</li>
<li>Forgetting to update pom.xml after adding a library.</li>
<li>Mixing multiple test frameworks unnecessarily.</li>
<li>Ignoring dependency conflicts.</li>
<li>Using excessive dependencies.</li>
<li>Committing the target directory unnecessarily.</li>
<li>Hard-coding environment-specific URLs.</li>
<li>Skipping tests without understanding the consequences.</li>
</ul>
<hr>
<h2>56. Maven Project and Git</h2>
<p>A Maven Selenium project is commonly maintained in Git. Source code, pom.xml, configuration templates, and test resources can be version controlled.</p>
<p>The generated <strong>target</strong> directory is generally treated as build output rather than source code.</p>
<h3>Example .gitignore</h3>
<pre><code>target/
.idea/
*.iml
.classpath
.project
.settings/</code></pre>
<hr>
<h2>57. Maven Project Development Workflow</h2>
<ol>
<li>Create the Maven project.</li>
<li>Configure groupId, artifactId, and version.</li>
<li>Create the standard Maven directory structure.</li>
<li>Add Selenium dependency.</li>
<li>Add TestNG or JUnit.</li>
<li>Create base test classes.</li>
<li>Create Page Object classes.</li>
<li>Create Selenium test cases.</li>
<li>Configure the required Maven plugins.</li>
<li>Run tests using Maven.</li>
<li>Review test results and reports.</li>
<li>Integrate the project with Git and CI/CD.</li>
</ol>
<hr>
<h2>58. Complete Selenium Maven Architecture</h2>
<pre><code> Selenium Maven Framework
|
+---------------+---------------+
| | |
v v v
pom.xml Test Code Resources
| | |
| +-------+-------+
| |
v v
Dependencies Page Objects
| |
v v
Maven Plugins Utilities
| |
+-----------+-----------+
|
v
Test Execution
|
v
Reports
|
v
CI/CD</code></pre>
<hr>
<h2>59. Practical Project: Selenium Login Automation Using Maven</h2>
<p>In this practical project, create a Maven Selenium framework that automates a login workflow.</p>
<h3>Project Requirements</h3>
<ul>
<li>Java</li>
<li>Maven</li>
<li>Selenium WebDriver</li>
<li>TestNG</li>
<li>Chrome or another supported browser</li>
<li>IDE such as IntelliJ IDEA or Eclipse</li>
</ul>
<h3>Test Flow</h3>
<pre><code>Open Browser
|
v
Open Login Page
|
v
Enter Username
|
v
Enter Password
|
v
Click Login
|
v
Validate Dashboard
|
v
Close Browser</code></pre>
<hr>
<h2>60. Practical Project: E-Commerce Selenium Maven Framework</h2>
<p>A larger project can automate an e-commerce application.</p>
<ul>
<li>Login Test</li>
<li>Product Search Test</li>
<li>Product Filter Test</li>
<li>Add to Cart Test</li>
<li>Remove from Cart Test</li>
<li>Checkout Test</li>
<li>Order Validation Test</li>
<li>Logout Test</li>
</ul>
<h3>Suggested Structure</h3>
<pre><code>src/test/java/
|
+-- base/
+-- pages/
| +-- LoginPage.java
| +-- HomePage.java
| +-- ProductPage.java
| +-- CartPage.java
| +-- CheckoutPage.java
|
+-- tests/
+-- LoginTest.java
+-- ProductTest.java
+-- CartTest.java
+-- CheckoutTest.java</code></pre>
<hr>
<h2>61. Maven and Data-Driven Testing</h2>
<p>Maven can be used with Selenium data-driven frameworks where test data comes from Excel, CSV, JSON, databases, or other sources.</p>
<pre><code>Test Data
|
v
Utility Class
|
v
Test Data Provider
|
v
Selenium Test
|
v
Assertions
|
v
Maven Test Execution</code></pre>
<hr>
<h2>62. Maven and Configuration Files</h2>
<p>Configuration files can store environment-specific values such as application URLs, browser settings, timeout values, and other framework settings.</p>
<pre><code>src/test/resources/
|
+-- config.properties
+-- testdata.json
+-- testng.xml</code></pre>
<h3>Example</h3>
<pre><code>browser=chrome
baseUrl=https://example.com
timeout=10</code></pre>
<hr>
<h2>63. Maven and Parallel Selenium Testing</h2>
<p>Maven can be part of a framework that executes tests in parallel. Parallel execution itself is usually configured through the selected test framework and build/test plugins.</p>
<pre><code>Test Suite
|
+-- Thread 1 --> Chrome --> Test A
|
+-- Thread 2 --> Chrome --> Test B
|
+-- Thread 3 --> Firefox --> Test C</code></pre>
<p>When implementing parallel Selenium execution, WebDriver instances should be isolated so that one test does not interfere with another.</p>
<hr>
<h2>64. Maven and Selenium Grid</h2>
<p>A Maven Selenium project can execute tests against Selenium Grid or other remote browser infrastructure.</p>
<pre><code>Maven Test
|
v
Selenium WebDriver
|
v
Remote WebDriver
|
v
Selenium Grid
|
+-- Chrome
+-- Firefox
+-- Edge</code></pre>
<hr>
<h2>65. Maven and Reporting</h2>
<p>Maven can be integrated with test-reporting plugins and reporting frameworks. Reports help testers understand passed tests, failed tests, skipped tests, execution duration, and failure details.</p>
<pre><code>Test Execution
|
v
Maven
|
v
Test Framework
|
v
Report Generation
|
v
HTML / XML / Other Reports</code></pre>
<hr>
<h2>66. Maven Clean Test Package Flow</h2>
<pre><code>mvn clean test
|
v
Remove target
|
v
Validate
|
v
Compile
|
v
Compile Test Code
|
v
Run Tests
mvn package
|
v
Build Project
|
v
Package Artifact</code></pre>
<hr>
<h2>67. Maven vs Gradle</h2>
<table border="1" cellpadding="8" cellspacing="0">
<tr><th>Maven</th><th>Gradle</th></tr>
<tr><td>Uses XML-based pom.xml.</td><td>Commonly uses Groovy or Kotlin DSL.</td></tr>
<tr><td>Convention-driven build system.</td><td>Highly programmable build system.</td></tr>
<tr><td>Widely used in Java projects.</td><td>Widely used across JVM and other ecosystems.</td></tr>
<tr><td>Standard lifecycle is easy to understand.</td><td>Flexible task-based configuration.</td></tr>
<tr><td>Large ecosystem of plugins and documentation.</td><td>Strong plugin ecosystem and flexible build logic.</td></tr>
</table>
<hr>
<h2>68. Maven Interview Questions</h2>
<h3>Q1. What is Maven?</h3>
<p>Maven is a build automation and dependency management tool commonly used for Java projects.</p>
<h3>Q2. What is pom.xml?</h3>
<p>pom.xml is the Project Object Model file containing project configuration, dependencies, plugins, and build information.</p>
<h3>Q3. What is a dependency?</h3>
<p>A dependency is an external library required by the project.</p>
<h3>Q4. What is groupId?</h3>
<p>groupId identifies the organization or logical group associated with a project.</p>
<h3>Q5. What is artifactId?</h3>
<p>artifactId identifies the project or artifact.</p>
<h3>Q6. What is a Maven lifecycle?</h3>
<p>A Maven lifecycle is a sequence of phases used to build, test, package, verify, install, or deploy a project.</p>
<h3>Q7. What is mvn clean?</h3>
<p>It removes generated build output, commonly including the target directory.</p>
<h3>Q8. What does mvn test do?</h3>
<p>It executes the test phase of the Maven default lifecycle.</p>
<h3>Q9. What is a transitive dependency?</h3>
<p>It is a dependency required by another dependency and resolved automatically by Maven.</p>
<h3>Q10. What is dependency:tree?</h3>
<p>It displays the dependency hierarchy of a Maven project.</p>
<h3>Q11. Why is Maven useful in Selenium?</h3>
<p>It manages Selenium and test-framework dependencies, provides standardized project builds, supports test execution, and integrates well with CI/CD systems.</p>
<h3>Q12. What is Maven Surefire?</h3>
<p>Surefire is a Maven plugin commonly used to execute tests during the test phase.</p>
<h3>Q13. What is dependencyManagement?</h3>
<p>It provides centralized dependency information, especially useful for parent and multi-module projects.</p>
<h3>Q14. What is a Maven profile?</h3>
<p>A Maven profile provides environment- or scenario-specific project configuration.</p>
<h3>Q15. What is the target folder?</h3>
<p>The target folder contains generated build output such as compiled classes, reports, and packaged artifacts.</p>
<hr>
<h2>69. Quick Revision</h2>
<table border="1" cellpadding="8" cellspacing="0">
<tr><th>Term</th><th>Meaning</th></tr>
<tr><td>Maven</td><td>Build automation and dependency management tool.</td></tr>
<tr><td>POM</td><td>Project Object Model configuration.</td></tr>
<tr><td>pom.xml</td><td>Main Maven project configuration file.</td></tr>
<tr><td>groupId</td><td>Project/organization identifier.</td></tr>
<tr><td>artifactId</td><td>Project/artifact identifier.</td></tr>
<tr><td>version</td><td>Project or artifact version.</td></tr>
<tr><td>dependency</td><td>External library required by a project.</td></tr>
<tr><td>plugin</td><td>Provides build or execution functionality.</td></tr>
<tr><td>repository</td><td>Location where Maven artifacts are stored.</td></tr>
<tr><td>lifecycle</td><td>Ordered sequence of Maven build phases.</td></tr>
<tr><td>target</td><td>Generated build output directory.</td></tr>
<tr><td>Surefire</td><td>Common Maven plugin for test execution.</td></tr>
<tr><td>profile</td><td>Environment-specific Maven configuration.</td></tr>
</table>
<hr>
<h2>70. Important Maven Commands for Selenium Testers</h2>
<pre><code>mvn -version
mvn clean
mvn validate
mvn compile
mvn test
mvn package
mvn verify
mvn install
mvn clean test
mvn clean package
mvn dependency:tree
mvn help:effective-pom
mvn test -Pqa</code></pre>
<hr>
<h2>71. Maven Selenium Best-Practice Checklist</h2>
<ul>
<li>Use the standard Maven project structure.</li>
<li>Keep all external dependencies in pom.xml.</li>
<li>Do not manually commit dependency JAR files.</li>
<li>Keep dependency versions controlled.</li>
<li>Use properties for reusable configuration values.</li>
<li>Use Page Object Model for Selenium pages.</li>
<li>Keep test data outside test logic when appropriate.</li>
<li>Use explicit synchronization strategies for dynamic applications.</li>
<li>Use Maven commands for repeatable builds.</li>
<li>Keep generated build output out of source control.</li>
<li>Use dependency:tree for dependency troubleshooting.</li>
<li>Integrate Maven execution into CI/CD.</li>
</ul>
<hr>
<h2>72. Final Summary</h2>
<p>Maven is an essential tool for creating professional Java and Selenium automation projects. Its central configuration file, <strong>pom.xml</strong>, defines the project's identity, dependencies, plugins, properties, build configuration, and other project information.</p>
<p>For Selenium testers, Maven simplifies dependency management, creates a standard project structure, supports TestNG and JUnit, enables repeatable test execution, supports reporting and CI/CD integration, and makes automation frameworks easier to maintain.</p>
<p>The most important Maven concepts for a Selenium tester are <strong>pom.xml, dependencies, repositories, Maven lifecycle, plugins, Surefire, properties, profiles, dependency management, standard directory structure, Maven commands, Page Object Model integration, and CI/CD execution</strong>.</p>
<hr>
<h2>73. Course Resources</h2>
<p><strong>Selenium Training:</strong> <a href="https://www.justacademy.co/course-detail/selenium-training" target="_blank" rel="noopener noreferrer">https://www.justacademy.co/course-detail/selenium-training</a></p>
<p><strong>Register for Course Demo:</strong> <a href="https://www.justacademy.co/register-for-course-demo" target="_blank" rel="noopener noreferrer">https://www.justacademy.co/register-for-course-demo</a></p>
</div>