Skip to content

Commit 7259ad9

Browse files
author
travis-ci
committed
Tidying up the configured driver interface and removing some duped code into a default implementation in the interface away from the implementations. Simplifying the interface for the TestConfigManager (it was an unwiedly set of calls). Adding in a polling tolerant click that is based on our tolerated exception list. Adding some additional tools around the embedded jetty for the test app we use to test our helper classes
1 parent 48f79e1 commit 7259ad9

25 files changed

+265
-208
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ submit an issue ticket.
3838
## Documentation
3939

4040
- A full reference guide is here: https://github.com/digital-delivery-academy/selenium-pom-framework/wiki
41-
- Technical reference documentation (javadocs) are here: https://digital-delivery-academy.github.io/selenium-pom-framework/javadoc-0.0.8
41+
- Technical reference documentation (javadocs) are here: https://digital-delivery-academy.github.io/selenium-pom-framework/javadoc-0.0.9
4242

4343
## Example tests
4444

@@ -52,7 +52,7 @@ Put this in your POM.xml.
5252
<dependency>
5353
<groupId>uk.co.evoco</groupId>
5454
<artifactId>selenium-pom-framework</artifactId>
55-
<version>0.0.8</version>
55+
<version>0.0.9</version>
5656
</dependency>
5757
```
5858

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>uk.co.evoco</groupId>
88
<artifactId>selenium-pom-framework</artifactId>
9-
<version>0.0.8</version>
9+
<version>0.0.9</version>
1010

1111
<contributors>
1212
<contributor>

src/main/java/uk/co/evoco/pageobjects/BasePageObject.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import org.openqa.selenium.WebDriver;
44
import org.openqa.selenium.support.PageFactory;
5+
import org.openqa.selenium.support.ui.WebDriverWait;
6+
import uk.co.evoco.webdriver.configuration.TestConfigManager;
57

68
/**
79
* This class is a base that all page objects can inherit from. It ensures that we have
@@ -13,6 +15,7 @@
1315
public abstract class BasePageObject {
1416

1517
protected WebDriver webDriver;
18+
protected WebDriverWait wait;
1619

1720
/**
1821
* Initiates page elements that are declared as fields annotated @FindBy and makes the WebDriver
@@ -22,5 +25,6 @@ public abstract class BasePageObject {
2225
public BasePageObject(WebDriver webDriver) {
2326
PageFactory.initElements(webDriver, this);
2427
this.webDriver = webDriver;
28+
this.wait = new WebDriverWait(this.webDriver, TestConfigManager.get().getWebDriverWaitTimeout());
2529
}
2630
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void setUp() throws IOException {
4040
this.webDriver = new WebDriverBuilder()
4141
.setResultsDirectory(this.resultsManager.getScreenshotDirectory())
4242
.build();
43-
this.webDriver.get(TestConfigManager.getInstance().getWebDriverConfig().getBaseUrl());
43+
this.webDriver.get(TestConfigManager.get().getBaseUrl());
4444
this.webDriver.manage().window().maximize();
4545
}
4646

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public WebDriverBuilder setResultsDirectory(File screenshotDirectory) {
3737
* @throws IOException if log file for browser driver logs cannot be created
3838
*/
3939
public EventFiringWebDriver build() throws IOException {
40-
switch(TestConfigManager.getInstance().getWebDriverConfig().getBrowserType()) {
40+
switch(TestConfigManager.get().getBrowserType()) {
4141
case CHROME:
4242
return new ConfiguredChromeDriver().getDriver(this.screenshotDirectory);
4343
case FIREFOX:

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

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
package uk.co.evoco.webdriver;
22

33
import org.apache.commons.io.FileUtils;
4-
import org.openqa.selenium.By;
5-
import org.openqa.selenium.TakesScreenshot;
6-
import org.openqa.selenium.OutputType;
7-
import org.openqa.selenium.WebDriver;
8-
import org.openqa.selenium.WebElement;
4+
import org.openqa.selenium.*;
95
import org.openqa.selenium.support.events.WebDriverEventListener;
106
import org.openqa.selenium.support.ui.ExpectedConditions;
117
import org.openqa.selenium.support.ui.WebDriverWait;
128
import org.slf4j.Logger;
139
import org.slf4j.LoggerFactory;
10+
import uk.co.evoco.webdriver.configuration.TestConfigManager;
1411

1512
import java.io.File;
1613
import java.util.UUID;
@@ -26,18 +23,9 @@
2623
*/
2724
public class WebDriverListener implements WebDriverEventListener {
2825

29-
private static long WEBDRIVER_WAIT_TIMEOUT = 30L;
3026
private static final Logger logger = LoggerFactory.getLogger(WebDriverListener.class);
3127
private File screenshotDirectory;
3228

33-
/**
34-
* Sets the wait for all of the ExpectedConditions calls that we make here
35-
* @param webDriverWaitTimeout the timeout used for WebDriverWaits
36-
*/
37-
public void setWebdriverWaitTimeout(long webDriverWaitTimeout) {
38-
this.WEBDRIVER_WAIT_TIMEOUT = webDriverWaitTimeout;
39-
}
40-
4129
/**
4230
* Sets the screenshot target directory that will be used for screenshots generated inside onException()
4331
* @param screenshotDirectory the path to the screenshot directory used in onException
@@ -153,7 +141,7 @@ public void afterNavigateRefresh(WebDriver webDriver) {
153141
* @param webDriver active WebDriver instance
154142
*/
155143
public void beforeFindBy(By by, WebElement webElement, WebDriver webDriver) {
156-
new WebDriverWait(webDriver, WEBDRIVER_WAIT_TIMEOUT).until(ExpectedConditions.presenceOfElementLocated(by));
144+
new WebDriverWait(webDriver, TestConfigManager.get().getWebDriverWaitTimeout()).until(ExpectedConditions.presenceOfElementLocated(by));
157145
}
158146

159147
/**
@@ -176,7 +164,7 @@ public void afterFindBy(By by, WebElement webElement, WebDriver webDriver) {
176164
* @param webDriver active WebDriver instance
177165
*/
178166
public void beforeClickOn(WebElement webElement, WebDriver webDriver) {
179-
new WebDriverWait(webDriver, WEBDRIVER_WAIT_TIMEOUT).until(ExpectedConditions.elementToBeClickable(webElement));
167+
new WebDriverWait(webDriver, TestConfigManager.get().getWebDriverWaitTimeout()).until(ExpectedConditions.elementToBeClickable(webElement));
180168
}
181169

182170
/**

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

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
public class TestConfigManager {
77

88
private static TestConfigManager testConfigManager;
9-
private WebDriverConfig webDriverConfig;
9+
private static WebDriverConfig webDriverConfig;
1010

1111
/**
1212
*
@@ -21,18 +21,10 @@ private TestConfigManager() {
2121
*
2222
* @return TestConfigManager returns the instance of the singleton to access the member methods
2323
*/
24-
public static TestConfigManager getInstance() {
24+
public static WebDriverConfig get() {
2525
if(null == testConfigManager) {
2626
testConfigManager = new TestConfigManager();
2727
}
28-
return testConfigManager;
29-
}
30-
31-
/**
32-
*
33-
* @return provides the globally available WebDriverConfig
34-
*/
35-
public WebDriverConfig getWebDriverConfig() {
3628
return webDriverConfig;
3729
}
3830
}

src/main/java/uk/co/evoco/webdriver/configuration/driver/ConfiguredChromeDriver.java

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22

33
import io.github.bonigarcia.wdm.WebDriverManager;
44
import org.openqa.selenium.WebDriver;
5-
import org.openqa.selenium.WebDriverException;
65
import org.openqa.selenium.chrome.ChromeDriver;
76
import org.openqa.selenium.chrome.ChromeOptions;
87
import org.openqa.selenium.remote.RemoteWebDriver;
9-
import org.openqa.selenium.support.events.EventFiringWebDriver;
108
import uk.co.evoco.webdriver.configuration.TestConfigManager;
119

12-
import java.io.File;
1310
import java.io.IOException;
1411

1512
public class ConfiguredChromeDriver implements ConfiguredDriver {
@@ -20,7 +17,7 @@ public class ConfiguredChromeDriver implements ConfiguredDriver {
2017
*/
2118
public WebDriver getRemoteDriver() {
2219
return new RemoteWebDriver(
23-
TestConfigManager.getInstance().getWebDriverConfig().getGridConfig().getGridUrl(), this.getOptions());
20+
TestConfigManager.get().getGridConfig().getGridUrl(), this.getOptions());
2421
}
2522

2623
/**
@@ -41,32 +38,7 @@ public WebDriver getLocalDriver() throws IOException {
4138
*/
4239
private ChromeOptions getOptions() {
4340
ChromeOptions chromeOptions = new ChromeOptions();
44-
chromeOptions.setHeadless(TestConfigManager.getInstance().getWebDriverConfig().isHeadless());
41+
chromeOptions.setHeadless(TestConfigManager.get().isHeadless());
4542
return chromeOptions;
4643
}
47-
48-
/**
49-
*
50-
* @param screenshotPath path to store screenshots
51-
* @return configured EventFiringWebDriver
52-
* @throws IOException if log directory doesn't exist
53-
*/
54-
@Override
55-
public EventFiringWebDriver getDriver(File screenshotPath) throws IOException {
56-
WebDriver webDriver;
57-
switch(TestConfigManager.getInstance().getWebDriverConfig().getRunType()) {
58-
case LOCAL:
59-
webDriver = getLocalDriver();
60-
break;
61-
case GRID:
62-
webDriver = getRemoteDriver();
63-
break;
64-
default:
65-
throw new WebDriverException("Must set runType to either LOCAL or GRID in configuration file");
66-
}
67-
return configureEventFiringWebDriver(
68-
webDriver,
69-
TestConfigManager.getInstance().getWebDriverConfig().getWebDriverWaitTimeout(),
70-
screenshotPath);
71-
}
7244
}

src/main/java/uk/co/evoco/webdriver/configuration/driver/ConfiguredDriver.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,42 @@
22

33
import org.apache.commons.io.FileUtils;
44
import org.openqa.selenium.WebDriver;
5+
import org.openqa.selenium.WebDriverException;
56
import org.openqa.selenium.support.events.EventFiringWebDriver;
67
import uk.co.evoco.webdriver.WebDriverListener;
8+
import uk.co.evoco.webdriver.configuration.TestConfigManager;
79

810
import java.io.File;
911
import java.io.IOException;
1012

1113
public interface ConfiguredDriver {
1214

15+
WebDriver getLocalDriver() throws IOException;
16+
WebDriver getRemoteDriver();
17+
1318
/**
14-
*
19+
*ß
1520
* @param screenshotPath path to store screenshots
1621
* @return configured EventFiringWebDriver
1722
* @throws IOException if log directory doesn't exist
1823
*/
19-
EventFiringWebDriver getDriver(File screenshotPath) throws IOException;
24+
default EventFiringWebDriver getDriver(File screenshotPath) throws IOException {
25+
WebDriver webDriver;
26+
switch(TestConfigManager.get().getRunType()) {
27+
case LOCAL:
28+
webDriver = getLocalDriver();
29+
break;
30+
case GRID:
31+
webDriver = getRemoteDriver();
32+
break;
33+
default:
34+
throw new WebDriverException("Must set runType to either LOCAL or GRID in configuration file");
35+
}
36+
return configureEventFiringWebDriver(
37+
webDriver,
38+
TestConfigManager.get().getWebDriverWaitTimeout(),
39+
screenshotPath);
40+
}
2041

2142
/**
2243
*
@@ -29,7 +50,6 @@ default EventFiringWebDriver configureEventFiringWebDriver(
2950
WebDriver webDriver, long timeout, File screenshotDirectory) {
3051
EventFiringWebDriver eventFiringWebDriver = new EventFiringWebDriver(webDriver);
3152
WebDriverListener eventListener = new WebDriverListener();
32-
eventListener.setWebdriverWaitTimeout(timeout);
3353
eventListener.setScreenshotDirectory(screenshotDirectory);
3454
eventFiringWebDriver.register(eventListener);
3555

src/main/java/uk/co/evoco/webdriver/configuration/driver/ConfiguredEdgeDriver.java

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@
22

33
import io.github.bonigarcia.wdm.WebDriverManager;
44
import org.openqa.selenium.WebDriver;
5-
import org.openqa.selenium.WebDriverException;
65
import org.openqa.selenium.edge.EdgeDriver;
76
import org.openqa.selenium.edge.EdgeOptions;
87
import org.openqa.selenium.remote.RemoteWebDriver;
9-
import org.openqa.selenium.support.events.EventFiringWebDriver;
108
import uk.co.evoco.webdriver.configuration.TestConfigManager;
119

12-
import java.io.File;
13-
1410
public class ConfiguredEdgeDriver implements ConfiguredDriver {
1511

1612
/**
@@ -19,7 +15,7 @@ public class ConfiguredEdgeDriver implements ConfiguredDriver {
1915
*/
2016
public WebDriver getRemoteDriver() {
2117
return new RemoteWebDriver(
22-
TestConfigManager.getInstance().getWebDriverConfig().getGridConfig().getGridUrl(), this.getOptions());
18+
TestConfigManager.get().getGridConfig().getGridUrl(), this.getOptions());
2319
}
2420

2521
/**
@@ -38,28 +34,4 @@ public WebDriver getLocalDriver() {
3834
public EdgeOptions getOptions() {
3935
return new EdgeOptions();
4036
}
41-
42-
/**
43-
*
44-
* @param screenshotPath path to store screenshots
45-
* @return configured EventFiringWebDriver
46-
*/
47-
@Override
48-
public EventFiringWebDriver getDriver(File screenshotPath) {
49-
WebDriver webDriver;
50-
switch(TestConfigManager.getInstance().getWebDriverConfig().getRunType()) {
51-
case LOCAL:
52-
webDriver = getLocalDriver();
53-
break;
54-
case GRID:
55-
webDriver = getRemoteDriver();
56-
break;
57-
default:
58-
throw new WebDriverException("Must set runType to either LOCAL or GRID in configuration file");
59-
}
60-
return configureEventFiringWebDriver(
61-
webDriver,
62-
TestConfigManager.getInstance().getWebDriverConfig().getWebDriverWaitTimeout(),
63-
screenshotPath);
64-
}
6537
}

0 commit comments

Comments
 (0)