Skip to content

Commit 856fcc1

Browse files
author
Shiwani Tummulwar
committed
initil push with google Search use case
1 parent a49f60f commit 856fcc1

File tree

13 files changed

+372
-25
lines changed

13 files changed

+372
-25
lines changed

.gitignore

+5-23
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,5 @@
1-
# Compiled class file
2-
*.class
3-
4-
# Log file
5-
*.log
6-
7-
# BlueJ files
8-
*.ctxt
9-
10-
# Mobile Tools for Java (J2ME)
11-
.mtj.tmp/
12-
13-
# Package Files #
14-
*.jar
15-
*.war
16-
*.nar
17-
*.ear
18-
*.zip
19-
*.tar.gz
20-
*.rar
21-
22-
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
23-
hs_err_pid*
1+
/target/*
2+
/test-output/*
3+
/screenshots/*
4+
.project
5+
.classpath

.settings/org.eclipse.jdt.core.prefs

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
eclipse.preferences.version=1
2+
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3+
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
4+
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
5+
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
6+
org.eclipse.jdt.core.compiler.compliance=1.8
7+
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
8+
org.eclipse.jdt.core.compiler.debug.localVariable=generate
9+
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
10+
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
11+
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
12+
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
13+
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
14+
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
15+
org.eclipse.jdt.core.compiler.release=disabled
16+
org.eclipse.jdt.core.compiler.source=1.8

.settings/org.eclipse.m2e.core.prefs

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
activeProfiles=
2+
eclipse.preferences.version=1
3+
resolveWorkspaceProjects=true
4+
version=1

README.md

+22-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,22 @@
1-
# Selenium-testNg-Maven
2-
This Repository contains boilerplate template for Selenium Test Automation framework.
1+
# Selenium-Java_BoilerCode
2+
3+
# Introduction
4+
This Test Automation Framework is created using Java + Selenium Web Driver + TestNG+ Maven Page Object Model(POM). Which can be used across different web based applications.It is used to make the code more readable, maintainable, and reusable.
5+
6+
# Pre-requisite:
7+
1. Java<br/>
8+
2. Maven<br/>
9+
3. Browsers (Firefox, Chrome)<br/>
10+
11+
12+
# Steps to clone execute the tests
13+
`git clone https://github.com/Shiwani01/Selenium-Java_BoilerCode.git` <br/>
14+
`cd Selenium-Java_BoilerCode`<br/>
15+
`mvn clean test`
16+
17+
# Screenshot:
18+
* Take Screenshots On test failures screenshots will automatically be taken and stored under build/screenshots. The screenshot files will be named of the test method name.
19+
20+
# Reporting:
21+
* The framework produce index.html report. It resides in the same 'test-output. This reports gives the link to all the different component of the TestNG reports like Groups & Reporter Output. On clicking these will display detailed descriptions of execution.<br/>
22+
* You can find emailable-report.html from test-output to email the test reports. As this is a html report you can open it with browser.

pom.xml

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<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">
2+
<modelVersion>4.0.0</modelVersion>
3+
<groupId>SeleniumProject</groupId>
4+
<artifactId>seleniumproject</artifactId>
5+
<version>0.0.1-SNAPSHOT</version>
6+
<dependencies>
7+
<dependency>
8+
9+
<groupId>org.seleniumhq.selenium</groupId>
10+
<artifactId>selenium-java</artifactId>
11+
<version>3.141.59</version>
12+
13+
</dependency>
14+
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
15+
<dependency>
16+
<groupId>org.testng</groupId>
17+
<artifactId>testng</artifactId>
18+
<version>7.1.0</version>
19+
<scope>compile</scope>
20+
</dependency>
21+
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-surefire-plugin -->
22+
<dependency>
23+
<groupId>org.apache.maven.plugins</groupId>
24+
<artifactId>maven-surefire-plugin</artifactId>
25+
<version>3.0.0-M5</version>
26+
</dependency>
27+
<!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
28+
<dependency>
29+
<groupId>io.github.bonigarcia</groupId>
30+
<artifactId>webdrivermanager</artifactId>
31+
<version>3.8.1</version>
32+
</dependency>
33+
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
34+
<dependency>
35+
<groupId>commons-io</groupId>
36+
<artifactId>commons-io</artifactId>
37+
<version>2.6</version>
38+
</dependency>
39+
40+
41+
</dependencies>
42+
<properties>
43+
<maven.compiler.source>1.8</maven.compiler.source>
44+
<maven.compiler.target>1.8</maven.compiler.target>
45+
</properties>
46+
</project>
+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.qa.base;
2+
3+
import org.openqa.selenium.chrome.ChromeDriver;
4+
import org.openqa.selenium.firefox.FirefoxDriver;
5+
import org.testng.annotations.AfterTest;
6+
7+
import com.qa.pages.SamplePage;
8+
import com.qa.util.Utility;
9+
10+
import io.github.bonigarcia.wdm.WebDriverManager;
11+
12+
public class BaseClass extends Utility {
13+
14+
public SamplePage sample;
15+
16+
public BaseClass() {
17+
18+
propertyInit();
19+
}
20+
21+
public static void intialization() {
22+
23+
String browserName = prop.getProperty("Browser");
24+
if (browserName.equals("chrome")) {
25+
26+
WebDriverManager.chromedriver().setup();
27+
driver = new ChromeDriver();
28+
} else if (browserName.equals("firefox")) {
29+
30+
WebDriverManager.firefoxdriver().setup();
31+
driver = new FirefoxDriver();
32+
}
33+
34+
driver.manage().window().maximize();
35+
driver.manage().deleteAllCookies();
36+
37+
driver.get(prop.getProperty("url"));
38+
39+
}
40+
41+
@AfterTest
42+
public void tearDown() {
43+
// closes all the browser windows opened by web driver
44+
driver.quit();
45+
}
46+
47+
}
+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.qa.pages;
2+
3+
import org.openqa.selenium.Keys;
4+
import org.openqa.selenium.WebElement;
5+
import org.openqa.selenium.support.FindBy;
6+
import org.openqa.selenium.support.PageFactory;
7+
import com.qa.pages.SamplePage;
8+
import com.qa.base.BaseClass;
9+
10+
public class SamplePage extends BaseClass {
11+
12+
// Page Factory - OR:
13+
14+
@FindBy(xpath = "//input[@title='Search']")
15+
WebElement homePageSearchBox;
16+
17+
// Initializing the Page Objects:
18+
19+
public SamplePage() {
20+
21+
PageFactory.initElements(driver, this);
22+
}
23+
24+
// demo test for googleSearch
25+
26+
public String getPageTitle() {
27+
return driver.getTitle();
28+
29+
}
30+
31+
public void search(String search) {
32+
homePageSearchBox.sendKeys(search, Keys.ENTER);
33+
homePageSearchBox.clear();
34+
35+
}
36+
37+
}
+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.qa.util;
2+
3+
import java.io.File;
4+
import java.io.FileInputStream;
5+
import java.io.FileNotFoundException;
6+
import java.io.IOException;
7+
import java.util.Properties;
8+
9+
import org.apache.commons.io.FileUtils;
10+
import org.openqa.selenium.OutputType;
11+
import org.openqa.selenium.TakesScreenshot;
12+
import org.openqa.selenium.WebDriver;
13+
import org.openqa.selenium.WebElement;
14+
import org.openqa.selenium.support.ui.ExpectedConditions;
15+
import org.openqa.selenium.support.ui.WebDriverWait;
16+
17+
public class Utility {
18+
19+
public static Properties prop;
20+
public static WebDriver driver;
21+
22+
public void propertyInit() {
23+
prop = new Properties();
24+
25+
try {
26+
FileInputStream file = new FileInputStream("src/main/resources/com/qa/config/config.properties");
27+
prop.load(file);
28+
} catch (FileNotFoundException e) {
29+
30+
e.printStackTrace();
31+
} catch (IOException e) {
32+
33+
e.printStackTrace();
34+
}
35+
}
36+
37+
public void waitFor(WebElement locator) {
38+
39+
WebDriverWait wait = new WebDriverWait(driver, Long.parseLong(prop.getProperty("EXPLICIT_WAIT")));
40+
wait.until(ExpectedConditions.elementToBeClickable(locator));
41+
42+
}
43+
44+
public void getFailedTestCases(String testMethodName) {
45+
46+
File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
47+
try {
48+
49+
// String screenshots = System.getProperty("user.dir");
50+
FileUtils.copyFile(src, new File("screenshots/" + testMethodName + ".png"));
51+
} catch (IOException e) {
52+
53+
e.printStackTrace();
54+
}
55+
}
56+
57+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Browser=chrome
2+
url=https://www.google.com
3+
EXPLICIT_WAIT=120;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.qa.listeners;
2+
3+
import org.testng.ITestContext;
4+
import org.testng.ITestListener;
5+
import org.testng.ITestResult;
6+
7+
import com.qa.base.BaseClass;
8+
9+
public class CustomListener extends BaseClass implements ITestListener {
10+
11+
@Override
12+
public void onTestStart(ITestResult result) {
13+
// TODO Auto-generated method stub
14+
ITestListener.super.onTestStart(result);
15+
}
16+
17+
@Override
18+
public void onTestSuccess(ITestResult result) {
19+
// TODO Auto-generated method stub
20+
ITestListener.super.onTestSuccess(result);
21+
}
22+
23+
@Override
24+
public void onTestFailure(ITestResult result) {
25+
26+
System.out.println("testcase failed");
27+
getFailedTestCases(result.getMethod().getMethodName());
28+
29+
ITestListener.super.onTestFailure(result);
30+
}
31+
32+
@Override
33+
public void onTestSkipped(ITestResult result) {
34+
// TODO Auto-generated method stub
35+
ITestListener.super.onTestSkipped(result);
36+
}
37+
38+
@Override
39+
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
40+
// TODO Auto-generated method stub
41+
ITestListener.super.onTestFailedButWithinSuccessPercentage(result);
42+
}
43+
44+
@Override
45+
public void onTestFailedWithTimeout(ITestResult result) {
46+
// TODO Auto-generated method stub
47+
ITestListener.super.onTestFailedWithTimeout(result);
48+
}
49+
50+
@Override
51+
public void onStart(ITestContext context) {
52+
// TODO Auto-generated method stub
53+
ITestListener.super.onStart(context);
54+
}
55+
56+
@Override
57+
public void onFinish(ITestContext context) {
58+
// TODO Auto-generated method stub
59+
ITestListener.super.onFinish(context);
60+
}
61+
62+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.qa.testcases;
2+
3+
import org.testng.Assert;
4+
import org.testng.annotations.BeforeTest;
5+
import org.testng.annotations.Test;
6+
import com.qa.base.BaseClass;
7+
import com.qa.pages.SamplePage;
8+
import com.qa.testdata.CustomDataProvider;
9+
10+
public class SampleTest extends BaseClass {
11+
12+
public SampleTest() {
13+
super();
14+
}
15+
16+
@BeforeTest
17+
public void setUp() {
18+
intialization();
19+
sample = new SamplePage();
20+
}
21+
@Test(priority = 1, dataProvider = "test-data", dataProviderClass = CustomDataProvider.class)
22+
public void verifyPageTitle(String title) {
23+
24+
String pageTitle = sample.getPageTitle();
25+
26+
Assert.assertEquals(sample.getPageTitle(), title);
27+
System.out.println(pageTitle);
28+
}
29+
30+
@Test(priority = 2, dataProvider = "test-data", dataProviderClass = CustomDataProvider.class)
31+
public void verifySearchResult(String key) {
32+
sample.search(key);
33+
Assert.assertTrue(true, "Test case Failed");
34+
35+
36+
}
37+
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.qa.testdata;
2+
3+
import java.lang.reflect.Method;
4+
5+
import org.testng.annotations.DataProvider;
6+
7+
public class CustomDataProvider {
8+
9+
@DataProvider(name = "test-data")
10+
11+
public static Object[][] getData(Method m) {
12+
switch (m.getName()) {
13+
case "verifySearchResult":
14+
return new Object[][] { { "Wallpaper" }, { "City Images" } };
15+
case "verifyPageTitle":
16+
return new Object[][] { { "Google" } };
17+
}
18+
19+
return null;
20+
}
21+
22+
}

0 commit comments

Comments
 (0)