Skip to content

Commit da19628

Browse files
Merge pull request #15 from digital-delivery-academy/new-features
New features and tests
2 parents 81350a3 + 588b4ac commit da19628

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1029
-66
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,5 @@ bin
4747

4848
*.csv
4949

50-
script/dist
50+
script/dist
51+
logs/*

.travis.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
dist: trusty
2+
13
language: java
24

35
jdk:
@@ -7,8 +9,18 @@ cache:
79
directories:
810
- $HOME/.m2
911

12+
before_script:
13+
- "export DISPLAY=:99.0"
14+
- "sh -e /etc/init.d/xvfb start"
15+
- sleep 3 # give xvfb some time to start
16+
1017
before_install:
1118
- "cp .travis.settings.xml $HOME/.m2/settings.xml"
19+
- "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16"
20+
- google-chrome-stable --remote-debugging-port=9222 http://localhost &
21+
22+
addons:
23+
firefox: latest
1224

1325
install:
1426
- mvn clean install -Dmaven.javadoc.skip=true -B -V

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# selenium-pom-example
1+
# selenium-pom-framework
22

33
[![Build Status](https://travis-ci.com/digital-delivery-academy/selenium-pom-framework.svg?branch=master)](https://travis-ci.com/digital-delivery-academy/selenium-pom-framework)
44
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/122f56e1b6284b319b8c23a58ab2c664)](https://www.codacy.com/gh/digital-delivery-academy/selenium-pom-example?utm_source=github.com&utm_medium=referral&utm_content=digital-delivery-academy/selenium-pom-example&utm_campaign=Badge_Grade)

config-fs.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
{
22
"browser": "chrome",
33
"baseUrl": "https://www.yahoo.com",
4-
"timeout": "30"
4+
"timeout": "30",
5+
"headless": true,
6+
"testConfig": {
7+
"sample": "sample text"
8+
},
9+
"gridConfig": {
10+
"url": "http://localhost:4444/wd/hub"
11+
}
512
}

pom.xml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@
4949
<maven.compiler.source>12</maven.compiler.source>
5050
<maven.compiler.target>12</maven.compiler.target>
5151
<maven.surefire.version>2.22.2</maven.surefire.version>
52+
<maven.failsafe.version>2.22.2</maven.failsafe.version>
5253
<junit.jupiter.version>5.5.2</junit.jupiter.version>
54+
<jetty.version>9.4.26.v20200117</jetty.version>
5355
<selenium.version>3.141.59</selenium.version>
5456
<webdriver.manager.version>3.7.1</webdriver.manager.version>
5557
<slf4j.version>1.6.4</slf4j.version>
@@ -125,6 +127,18 @@
125127
<version>${hamcrest.version}</version>
126128
<scope>test</scope>
127129
</dependency>
130+
<dependency>
131+
<groupId>org.eclipse.jetty</groupId>
132+
<artifactId>jetty-server</artifactId>
133+
<version>${jetty.version}</version>
134+
<scope>test</scope>
135+
</dependency>
136+
<dependency>
137+
<groupId>org.eclipse.jetty</groupId>
138+
<artifactId>jetty-servlet</artifactId>
139+
<version>${jetty.version}</version>
140+
<scope>test</scope>
141+
</dependency>
128142
</dependencies>
129143

130144
<build>
@@ -136,6 +150,22 @@
136150
<plugin>
137151
<artifactId>maven-surefire-plugin</artifactId>
138152
<version>${maven.surefire.version}</version>
153+
<configuration>
154+
<skip>false</skip>
155+
</configuration>
156+
</plugin>
157+
<plugin>
158+
<groupId>org.apache.maven.plugins</groupId>
159+
<artifactId>maven-failsafe-plugin</artifactId>
160+
<version>${maven.failsafe.version}</version>
161+
<executions>
162+
<execution>
163+
<goals>
164+
<goal>integration-test</goal>
165+
<goal>verify</goal>
166+
</goals>
167+
</execution>
168+
</executions>
139169
</plugin>
140170
<plugin>
141171
<groupId>org.codehaus.mojo</groupId>

src/main/java/uk/co/evoco/tests/BaseAbstractTest.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
import org.junit.jupiter.api.BeforeEach;
66
import org.openqa.selenium.support.events.EventFiringWebDriver;
77
import uk.co.evoco.webdriver.WebDriverBuilder;
8-
import uk.co.evoco.webdriver.configuration.ConfigurationLoader;
9-
import uk.co.evoco.webdriver.configuration.WebDriverConfig;
8+
import uk.co.evoco.webdriver.configuration.TestConfigManager;
109
import uk.co.evoco.webdriver.results.ResultsManager;
1110

1211
import java.io.IOException;
@@ -17,7 +16,6 @@
1716
*/
1817
public abstract class BaseAbstractTest {
1918
protected EventFiringWebDriver webDriver;
20-
protected static WebDriverConfig webDriverConfig;
2119
protected static ResultsManager resultsManager;
2220

2321
/**
@@ -27,10 +25,7 @@ public abstract class BaseAbstractTest {
2725
* @throws IOException
2826
*/
2927
@BeforeAll
30-
public static void beforeAll() throws IOException {
31-
webDriverConfig = new ConfigurationLoader()
32-
.decideWhichConfigurationToUse()
33-
.build();
28+
public static void beforeAll() {
3429
resultsManager = new ResultsManager();
3530
resultsManager.createScreenshotDirectory();
3631
}
@@ -41,12 +36,11 @@ public static void beforeAll() throws IOException {
4136
* This ensures we always have a fresh browser window and a guaranteed starting point
4237
*/
4338
@BeforeEach
44-
public void setUp() {
39+
public void setUp() throws IOException {
4540
this.webDriver = new WebDriverBuilder()
46-
.setConfiguration(webDriverConfig)
4741
.setResultsDirectory(this.resultsManager.getScreenshotDirectory())
4842
.build();
49-
this.webDriver.get(webDriverConfig.getBaseUrl());
43+
this.webDriver.get(TestConfigManager.getInstance().getWebDriverConfig().getBaseUrl());
5044
this.webDriver.manage().window().maximize();
5145
}
5246

Lines changed: 15 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,26 @@
11
package uk.co.evoco.webdriver;
22

3-
import io.github.bonigarcia.wdm.WebDriverManager;
4-
import org.openqa.selenium.WebDriver;
5-
import org.openqa.selenium.chrome.ChromeDriver;
6-
import org.openqa.selenium.edge.EdgeDriver;
7-
import org.openqa.selenium.firefox.FirefoxDriver;
8-
import org.openqa.selenium.ie.InternetExplorerDriver;
9-
import org.openqa.selenium.safari.SafariDriver;
103
import org.openqa.selenium.support.events.EventFiringWebDriver;
11-
import uk.co.evoco.webdriver.configuration.WebDriverConfig;
4+
import uk.co.evoco.webdriver.configuration.TestConfigManager;
5+
import uk.co.evoco.webdriver.configuration.driver.*;
126

137
import java.io.File;
8+
import java.io.IOException;
149

1510
/**
1611
* This class uses the Builder Pattern to construct its options. Calling .build() will
1712
* result in all of the configuration options being assembled and a valid WebDriver object being
1813
* supplied to the caller
1914
*/
2015
public class WebDriverBuilder {
21-
22-
private WebDriverConfig webDriverConfig;
16+
2317
private File screenshotDirectory;
24-
18+
2519
/**
26-
* Allows caller to provide a WebDriverConfig object. Returns reference to the class instance of WebDriverBuilder
27-
* to maintain the builder pattern.
28-
* @param webDriverConfig
29-
* @return WebDriverBuilder
20+
*
21+
* @param screenshotDirectory
22+
* @return
3023
*/
31-
public WebDriverBuilder setConfiguration(WebDriverConfig webDriverConfig) {
32-
this.webDriverConfig = webDriverConfig;
33-
return this;
34-
}
35-
3624
public WebDriverBuilder setResultsDirectory(File screenshotDirectory) {
3725
this.screenshotDirectory = screenshotDirectory;
3826
return this;
@@ -43,39 +31,20 @@ public WebDriverBuilder setResultsDirectory(File screenshotDirectory) {
4331
* construct an EventFiringWebDriver with the correct configuration for the browser type
4432
* @return EventFiringWebDriver
4533
*/
46-
public EventFiringWebDriver build() {
47-
WebDriver webDriver;
48-
49-
switch(this.webDriverConfig.getBrowserType()) {
34+
public EventFiringWebDriver build() throws IOException {
35+
switch(TestConfigManager.getInstance().getWebDriverConfig().getBrowserType()) {
5036
case CHROME:
51-
WebDriverManager.chromedriver().setup();
52-
webDriver = new ChromeDriver();
53-
break;
37+
return new ConfiguredChromeDriver(TestConfigManager.getInstance().getWebDriverConfig()).getDriver(this.screenshotDirectory);
5438
case FIREFOX:
55-
WebDriverManager.firefoxdriver().setup();
56-
webDriver = new FirefoxDriver();
57-
break;
39+
return new ConfiguredFirefoxDriver(TestConfigManager.getInstance().getWebDriverConfig()).getDriver(this.screenshotDirectory);
5840
case IE:
59-
WebDriverManager.iedriver().setup();
60-
webDriver = new InternetExplorerDriver();
61-
break;
41+
return new ConfiguredInternetExplorerDriver(TestConfigManager.getInstance().getWebDriverConfig()).getDriver(this.screenshotDirectory);
6242
case EDGE:
63-
WebDriverManager.edgedriver().setup();
64-
webDriver = new EdgeDriver();
65-
break;
43+
return new ConfiguredEdgeDriver(TestConfigManager.getInstance().getWebDriverConfig()).getDriver(this.screenshotDirectory);
6644
case SAFARI:
67-
webDriver = new SafariDriver();
68-
break;
45+
return new ConfiguredSafariDriver(TestConfigManager.getInstance().getWebDriverConfig()).getDriver(this.screenshotDirectory);
6946
default:
7047
throw new RuntimeException("WebDriverBuilder has no valid target browser set in WebDriverConfig");
7148
}
72-
73-
EventFiringWebDriver eventFiringWebDriver = new EventFiringWebDriver(webDriver);
74-
WebDriverListener eventListener = new WebDriverListener();
75-
eventListener.setWebdriverWaitTimeout(this.webDriverConfig.getWebDriverWaitTimeout());
76-
eventListener.setScreenshotDirectory(this.screenshotDirectory);
77-
eventFiringWebDriver.register(eventListener);
78-
79-
return eventFiringWebDriver;
8049
}
8150
}

src/main/java/uk/co/evoco/webdriver/WebDriverListener.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,18 @@ public class WebDriverListener implements WebDriverEventListener {
3030
private static final Logger logger = LoggerFactory.getLogger(WebDriverListener.class);
3131
private File screenshotDirectory;
3232

33+
/**
34+
* Sets the wait for all of the ExpectedConditions calls that we make here
35+
* @param webDriverWaitTimeout
36+
*/
3337
public void setWebdriverWaitTimeout(long webDriverWaitTimeout) {
3438
this.WEBDRIVER_WAIT_TIMEOUT = webDriverWaitTimeout;
3539
}
3640

41+
/**
42+
* Sets the screenshot target directory that will be used for screenshots generated inside onException()
43+
* @param screenshotDirectory
44+
*/
3745
public void setScreenshotDirectory(File screenshotDirectory) {
3846
this.screenshotDirectory = screenshotDirectory;
3947
}

src/main/java/uk/co/evoco/webdriver/configuration/ConfigurationLoader.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ public ConfigurationLoader decideWhichConfigurationToUse() {
3838
* @return WebDriverConfig
3939
* @throws IOException
4040
*/
41-
public WebDriverConfig build() throws IOException {
42-
return JsonUtils.fromFile(FileLoaderUtils.loadFromClasspathOrFileSystem(targetConfigurationFile), WebDriverConfig.class);
41+
public WebDriverConfig build() {
42+
try {
43+
return JsonUtils.fromFile(FileLoaderUtils.loadFromClasspathOrFileSystem(targetConfigurationFile), WebDriverConfig.class);
44+
} catch (IOException e) {
45+
throw new RuntimeException("Unable to load configuration from " + targetConfigurationFile);
46+
}
4347
}
4448
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package uk.co.evoco.webdriver.configuration;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
5+
import java.net.MalformedURLException;
6+
import java.net.URL;
7+
8+
public class GridConfig {
9+
private URL gridUrl;
10+
11+
public URL getGridUrl() {
12+
return gridUrl;
13+
}
14+
15+
@JsonProperty("url")
16+
public void setGridUrl(String gridUrl) throws MalformedURLException {
17+
this.gridUrl = new URL(gridUrl);
18+
}
19+
}

0 commit comments

Comments
 (0)