Skip to content

Commit e277eeb

Browse files
added fix with return type of environment value (#59)
* added fix with return type of environment value * increased page load timeout * added logging for failed test to catch issue on azure * added deviation support to Timer utility class * added DurationSample class to keep state of duration updated tests with timer * added DurationSample class to keep state of duration updated tests with timer * increased deviation for retrier test * added waiting until element will be unfocused * increased deviation for some cases * corrected timeout configuration test: removed using of env variables * increased timeout for downloading file * removed duplicated test * moved default deviations to class variables
1 parent 15471a6 commit e277eeb

File tree

15 files changed

+289
-152
lines changed

15 files changed

+289
-152
lines changed

pom.xml

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

77
<groupId>com.github.aquality-automation</groupId>
88
<artifactId>aquality-selenium</artifactId>
9-
<version>1.1.1</version>
9+
<version>1.1.2</version>
1010
<packaging>jar</packaging>
1111

1212
<name>Aquality Selenium</name>

src/main/java/aquality/selenium/utils/JsonFile.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,18 @@ public Object getValue(String jsonPath){
3535
private Object getEnvValueOrDefault(String jsonPath){
3636
String key = jsonPath.replace("/",".").substring(1, jsonPath.length());
3737
String envVar = System.getProperty(key);
38-
if(envVar == null){
39-
JsonNode node = getJsonNode(jsonPath);
40-
if(node.isBoolean()){
41-
return node.asBoolean();
42-
}else if(node.isLong()){
43-
return node.asLong();
44-
}else if(node.isInt()){
45-
return node.asInt();
46-
}else{
47-
return node.asText();
48-
}
49-
}else {
38+
if(envVar != null){
5039
Logger.getInstance().debug(String.format("***** Using variable passed from environment %1$s=%2$s", key, envVar));
51-
return envVar;
40+
}
41+
JsonNode node = getJsonNode(jsonPath);
42+
if(node.isBoolean()){
43+
return envVar == null ? node.asBoolean() : Boolean.parseBoolean(envVar);
44+
}else if(node.isLong()){
45+
return envVar == null ? node.asLong() : Long.parseLong(envVar);
46+
}else if(node.isInt()){
47+
return envVar == null ? node.asInt() : Integer.parseInt(envVar);
48+
}else{
49+
return envVar == null ? node.asText() : envVar;
5250
}
5351
}
5452

src/test/java/aquality/selenium/utils/ElementActionRetrierTests.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,17 @@
22

33
import aquality.selenium.configuration.Configuration;
44
import aquality.selenium.logger.Logger;
5-
import org.apache.commons.lang3.time.StopWatch;
65
import org.openqa.selenium.InvalidArgumentException;
76
import org.openqa.selenium.InvalidElementStateException;
87
import org.openqa.selenium.StaleElementReferenceException;
98
import org.testng.annotations.DataProvider;
109
import org.testng.annotations.Test;
10+
import utils.DurationSample;
1111
import utils.Timer;
1212

1313
import java.lang.reflect.Constructor;
1414
import java.lang.reflect.InvocationTargetException;
1515
import java.util.Date;
16-
import java.util.concurrent.TimeUnit;
1716
import java.util.concurrent.atomic.AtomicBoolean;
1817
import java.util.concurrent.atomic.AtomicInteger;
1918

@@ -43,20 +42,18 @@ public void testRetrierShouldWorkOnceIfMethodSucceeded() {
4342

4443
@Test(dataProvider = "handledExceptions")
4544
public void testRetrierShouldWaitPollingTimeBetweenMethodsCall(RuntimeException handledException) {
46-
StopWatch stopWatch = new StopWatch();
47-
stopWatch.start();
45+
Timer timer = new Timer(Timer.TimeUnit.MILLISECONDS);
46+
timer.start();
4847
AtomicBoolean isThrowException = new AtomicBoolean(true);
4948
ElementActionRetrier.doWithRetry(() -> {
5049
if (isThrowException.get()) {
5150
isThrowException.set(false);
5251
throw handledException;
5352
}
5453
});
55-
stopWatch.stop();
54+
DurationSample durationSample = new DurationSample( timer.duration(), pollingInterval, 200);
5655

57-
long duration = stopWatch.getTime(TimeUnit.MILLISECONDS);
58-
assertTrue(duration >= pollingInterval, "duration should be more than polling interval. actual is " + duration + " milliseconds");
59-
assertTrue(duration <= 2 * pollingInterval, "duration should be less than doubled polling interval. actual is " + duration + " milliseconds");
56+
assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
6057
}
6158

6259
@Test(expectedExceptions = InvalidArgumentException.class)

src/test/java/aquality/selenium/waitings/ConditionalWaitTests.java

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package aquality.selenium.waitings;
22

3+
import aquality.selenium.browser.BrowserManager;
34
import aquality.selenium.configuration.Configuration;
45
import aquality.selenium.configuration.ITimeoutConfiguration;
56
import org.openqa.selenium.StaleElementReferenceException;
6-
import org.testng.annotations.BeforeMethod;
77
import org.testng.annotations.Test;
8+
import utils.DurationSample;
89
import utils.Timer;
910

1011
import java.util.Collections;
@@ -17,67 +18,66 @@ public class ConditionalWaitTests {
1718

1819
private static final long waitForTimeoutCondition = 10;
1920
private static final long waitForTimeoutPolling = 150;
20-
private Timer timer;
21-
22-
@BeforeMethod
23-
public void initTimer(){
24-
timer = new Timer();
25-
}
21+
private static final double defaultDeviation = 7;
2622

2723
@Test
2824
public void testFalseShouldBeReturnedIfConditionIsNotMetAndDefaultTimeoutIsOver(){
2925
long timeoutCondition = getTimeoutConfig().getCondition();
3026

27+
Timer timer = new Timer();
3128
boolean result = ConditionalWait.waitForTrue(() ->
3229
{
3330
timer.start();
3431
return false;
3532
}, "Condition should be true");
36-
double duration = timer.stop();
33+
DurationSample durationSample = new DurationSample(timer.duration(), timeoutCondition, defaultDeviation);
3734

3835
assertFalse(result);
39-
assertTrue(duration > timeoutCondition && duration < 2 * timeoutCondition);
36+
assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
4037
}
4138

4239
@Test
4340
public void testTimeoutExceptionShouldBeThrownIfConditionIsMetAndTimeoutIsOver(){
41+
Timer timer = new Timer();
4442
try {
4543
ConditionalWait.waitForTrue(() ->
4644
{
4745
timer.start();
4846
return false;
4947
}, waitForTimeoutCondition, waitForTimeoutPolling,"Condition should be true");
5048
} catch (TimeoutException e) {
51-
double duration = timer.stop();
52-
assertTrue(duration > waitForTimeoutCondition && duration < 2 * waitForTimeoutCondition);
49+
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition, defaultDeviation);
50+
assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
5351
}
5452
}
5553

5654
@Test
5755
public void testTimeoutExceptionShouldNotBeThrownIfConditionIsMetAndDefaultTimeoutIsNotOver(){
5856
long timeoutCondition = getTimeoutConfig().getCondition();
57+
Timer timer = new Timer();
5958

6059
boolean result = ConditionalWait.waitForTrue(() ->
6160
{
6261
timer.start();
6362
return true;
6463
}, "Timeout exception should not be thrown");
65-
double duration = timer.stop();
64+
DurationSample durationSample = new DurationSample(timer.duration(), timeoutCondition);
6665

6766
assertTrue(result);
68-
assertTrue(duration < timeoutCondition);
67+
assertTrue(durationSample.getDuration() < timeoutCondition);
6968
}
7069

7170
@Test
7271
public void testTimeoutExceptionShouldNotBeThrownIfConditionMetAndTimeoutIsNotOver() throws TimeoutException {
72+
Timer timer = new Timer();
73+
7374
ConditionalWait.waitForTrue(() ->
7475
{
7576
timer.start();
7677
return true;
7778
}, waitForTimeoutCondition, waitForTimeoutPolling, "Timeout exception should not be thrown");
78-
double duration = timer.stop();
79-
80-
assertTrue(duration < waitForTimeoutCondition);
79+
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition);
80+
assertTrue(durationSample.getDuration() < waitForTimeoutCondition);
8181
}
8282

8383
@Test(expectedExceptions = IllegalArgumentException.class)
@@ -88,6 +88,8 @@ public void testNullCannotBePassedAsCondition(){
8888
@Test
8989
public void testTimeoutExceptionShouldBeThrownIfDriverConditionIsNotMetAndDefaultTimeoutIsOver(){
9090
long timeoutCondition = getTimeoutConfig().getCondition();
91+
Timer timer = new Timer();
92+
9193
try{
9294
ConditionalWait.waitFor((driver) ->
9395
{
@@ -97,14 +99,17 @@ public void testTimeoutExceptionShouldBeThrownIfDriverConditionIsNotMetAndDefaul
9799
"Condition should be true");
98100

99101
}catch (org.openqa.selenium.TimeoutException e){
100-
double duration = timer.stop();
102+
DurationSample durationSample = new DurationSample(timer.duration(), timeoutCondition, defaultDeviation);
103+
BrowserManager.getBrowser().quit();
101104

102-
assertTrue(duration > timeoutCondition && duration < 2 * timeoutCondition);
105+
assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
103106
}
104107
}
105108

106109
@Test
107110
public void testTimeoutExceptionShouldBeThrownIfDriverConditionIsNotMetAndTimeoutIsOver(){
111+
Timer timer = new Timer();
112+
108113
try{
109114
ConditionalWait.waitFor((driver) ->
110115
{
@@ -114,28 +119,33 @@ public void testTimeoutExceptionShouldBeThrownIfDriverConditionIsNotMetAndTimeou
114119
"Conditional should be true", Collections.singleton(StaleElementReferenceException.class));
115120

116121
}catch (org.openqa.selenium.TimeoutException e){
117-
double duration = timer.stop();
118-
119-
assertTrue(duration > waitForTimeoutCondition && duration < 2 * waitForTimeoutCondition);
122+
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition, defaultDeviation);
123+
BrowserManager.getBrowser().quit();
120124

125+
assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
121126
}
122127
}
123128

124129
@Test
125130
public void testTimeoutExceptionShouldNotBeThrownIfDriverConditionIsMetAndDefaultTimeoutIsNotOver(){
131+
Timer timer = new Timer();
132+
126133
ConditionalWait.waitFor((driver) ->
127134
{
128135
timer.start();
129136
return true;
130137
},
131138
"Conditional should be true");
132-
double duration = timer.stop();
139+
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition);
140+
BrowserManager.getBrowser().quit();
133141

134-
assertTrue(duration < getTimeoutConfig().getCondition());
142+
assertTrue(durationSample.getDuration() < getTimeoutConfig().getCondition());
135143
}
136144

137145
@Test
138146
public void testExceptionShouldBeCatchedConditionIsMetAndDefaultTimeoutIsNotOver(){
147+
Timer timer = new Timer();
148+
139149
try{
140150
ConditionalWait.waitFor((driver) ->
141151
{
@@ -144,23 +154,27 @@ public void testExceptionShouldBeCatchedConditionIsMetAndDefaultTimeoutIsNotOver
144154
}, waitForTimeoutCondition, waitForTimeoutPolling,
145155
"Conditional should be true", Collections.singleton(IllegalArgumentException.class));
146156
} catch (org.openqa.selenium.TimeoutException e){
147-
double duration = timer.stop();
157+
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition, defaultDeviation);
158+
BrowserManager.getBrowser().quit();
148159

149-
assertTrue(duration > waitForTimeoutCondition && duration < 2 * waitForTimeoutCondition);
160+
assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
150161
}
151162
}
152163

153164
@Test
154165
public void testTimeoutExceptionShouldNotBeThrownIfDriverConditionIsMetAndTimeoutIsNotOver(){
166+
Timer timer = new Timer();
167+
155168
ConditionalWait.waitFor((driver) ->
156169
{
157170
timer.start();
158171
return true;
159172
}, waitForTimeoutCondition, waitForTimeoutPolling,
160173
"Conditional should be true", Collections.singleton(IllegalArgumentException.class));
161-
double duration = timer.stop();
174+
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition);
175+
BrowserManager.getBrowser().quit();
162176

163-
assertTrue(duration < waitForTimeoutCondition);
177+
assertTrue(durationSample.getDuration() < waitForTimeoutCondition);
164178
}
165179

166180
private ITimeoutConfiguration getTimeoutConfig(){

src/test/java/tests/integration/ActionTests.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import aquality.selenium.elements.actions.JsActions;
66
import aquality.selenium.elements.interfaces.IButton;
77
import aquality.selenium.elements.interfaces.ITextBox;
8+
import aquality.selenium.waitings.ConditionalWait;
89
import automationpractice.forms.ProductForm;
910
import automationpractice.forms.ProductListForm;
1011
import org.openqa.selenium.Keys;
@@ -50,8 +51,13 @@ public void testMoveMouseToElement() {
5051
@Test
5152
public void testMoveMouseFromElement() {
5253
ProductListForm productListForm = new ProductListForm();
54+
55+
Assert.assertTrue(ConditionalWait.waitForTrue(() -> {
56+
IButton button = productListForm.getBtnLastProductMoreFocused();
57+
return button.getText().contains("More");
58+
}, "element is not focused after moveMouseToElement()"));
59+
5360
IButton button = productListForm.getBtnLastProductMoreFocused();
54-
Assert.assertTrue(button.getText().contains("More"), "element is not focused after moveMouseToElement()");
5561
productListForm.getLblLastProduct().getMouseActions().moveMouseFromElement();
5662
Assert.assertFalse(button.state().isDisplayed(), "element is still focused after moveMouseFromElement()");
5763
}

src/test/java/tests/integration/BrowserTests.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,20 @@
1212
import theinternet.TheInternetPage;
1313
import theinternet.forms.DynamicContentForm;
1414
import theinternet.forms.FormAuthenticationForm;
15-
import utils.TimeUtil;
15+
import utils.DurationSample;
16+
import utils.Timer;
1617

1718
import java.io.IOException;
1819
import java.io.UncheckedIOException;
1920

2021
import static automationpractice.Constants.URL_AUTOMATIONPRACTICE;
2122
import static utils.FileUtil.getResourceFileByName;
22-
import static utils.TimeUtil.getCurrentTimeInSeconds;
2323

2424

2525
public class BrowserTests extends BaseTest {
2626

27+
private static final double defaultDeviation = 3;
28+
2729
@Test
2830
public void testShouldBePossibleToStartBrowserAndNavigate(){
2931
getBrowser().goTo(TheInternetPage.LOGIN.getAddress());
@@ -108,13 +110,14 @@ public void testShouldBePossibleToExecuteJavaScriptAsync(){
108110
getBrowser().waitForPageToLoad();
109111

110112
long expectedDurationInSeconds = 1;
111-
long operationDurationInSeconds = 1;
112-
double startTimeSeconds = TimeUtil.getCurrentTimeInSeconds();
113+
114+
Timer timer = new Timer();
115+
timer.start();
113116
getBrowser().executeAsyncScript(getAsyncTimeoutJavaScript(expectedDurationInSeconds));
114-
double durationSeconds = TimeUtil.getCurrentTimeInSeconds() - startTimeSeconds;
115117

116-
Assert.assertTrue(durationSeconds < (expectedDurationInSeconds + operationDurationInSeconds) &&
117-
durationSeconds >= expectedDurationInSeconds);
118+
DurationSample durationSample = new DurationSample(timer.duration(), expectedDurationInSeconds, defaultDeviation);
119+
120+
Assert.assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
118121
}
119122

120123
@Test (expectedExceptions = ScriptTimeoutException.class)
@@ -186,18 +189,17 @@ public void testShouldBePossibleToGetBrowserName() {
186189
@Test
187190
public void testShouldBePossibleToSetImplicitWait(){
188191
long waitTime = 5L;
189-
long operationTime = 2L;
190192
getBrowser().setImplicitWaitTimeout(waitTime);
191193

192-
double startTime = getCurrentTimeInSeconds();
193-
double endTime = 0L;
194+
Timer timer = new Timer();
195+
timer.start();
196+
DurationSample durationSample = null;
194197
try{
195198
getBrowser().getDriver().findElement(By.id("not_exist_element"));
196199
}catch (NoSuchElementException e){
197-
endTime = getCurrentTimeInSeconds();
200+
durationSample = new DurationSample(timer.duration(), waitTime, defaultDeviation);
198201
}
199-
Assert.assertTrue((endTime - startTime) < waitTime + operationTime);
200-
Assert.assertTrue((endTime - startTime) >= waitTime);
202+
Assert.assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
201203
}
202204

203205
@Test

0 commit comments

Comments
 (0)