Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.github.aquality-automation</groupId>
<artifactId>aquality-selenium</artifactId>
<version>1.1.1</version>
<version>1.1.2</version>
<packaging>jar</packaging>

<name>Aquality Selenium</name>
Expand Down
24 changes: 11 additions & 13 deletions src/main/java/aquality/selenium/utils/JsonFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,18 @@ public Object getValue(String jsonPath){
private Object getEnvValueOrDefault(String jsonPath){
String key = jsonPath.replace("/",".").substring(1, jsonPath.length());
String envVar = System.getProperty(key);
if(envVar == null){
JsonNode node = getJsonNode(jsonPath);
if(node.isBoolean()){
return node.asBoolean();
}else if(node.isLong()){
return node.asLong();
}else if(node.isInt()){
return node.asInt();
}else{
return node.asText();
}
}else {
if(envVar != null){
Logger.getInstance().debug(String.format("***** Using variable passed from environment %1$s=%2$s", key, envVar));
return envVar;
}
JsonNode node = getJsonNode(jsonPath);
if(node.isBoolean()){
return envVar == null ? node.asBoolean() : Boolean.parseBoolean(envVar);
}else if(node.isLong()){
return envVar == null ? node.asLong() : Long.parseLong(envVar);
}else if(node.isInt()){
return envVar == null ? node.asInt() : Integer.parseInt(envVar);
}else{
return envVar == null ? node.asText() : envVar;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,17 @@

import aquality.selenium.configuration.Configuration;
import aquality.selenium.logger.Logger;
import org.apache.commons.lang3.time.StopWatch;
import org.openqa.selenium.InvalidArgumentException;
import org.openqa.selenium.InvalidElementStateException;
import org.openqa.selenium.StaleElementReferenceException;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import utils.DurationSample;
import utils.Timer;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

Expand Down Expand Up @@ -43,20 +42,18 @@ public void testRetrierShouldWorkOnceIfMethodSucceeded() {

@Test(dataProvider = "handledExceptions")
public void testRetrierShouldWaitPollingTimeBetweenMethodsCall(RuntimeException handledException) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Timer timer = new Timer(Timer.TimeUnit.MILLISECONDS);
timer.start();
AtomicBoolean isThrowException = new AtomicBoolean(true);
ElementActionRetrier.doWithRetry(() -> {
if (isThrowException.get()) {
isThrowException.set(false);
throw handledException;
}
});
stopWatch.stop();
DurationSample durationSample = new DurationSample( timer.duration(), pollingInterval, 200);

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

@Test(expectedExceptions = InvalidArgumentException.class)
Expand Down
68 changes: 41 additions & 27 deletions src/test/java/aquality/selenium/waitings/ConditionalWaitTests.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package aquality.selenium.waitings;

import aquality.selenium.browser.BrowserManager;
import aquality.selenium.configuration.Configuration;
import aquality.selenium.configuration.ITimeoutConfiguration;
import org.openqa.selenium.StaleElementReferenceException;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import utils.DurationSample;
import utils.Timer;

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

private static final long waitForTimeoutCondition = 10;
private static final long waitForTimeoutPolling = 150;
private Timer timer;

@BeforeMethod
public void initTimer(){
timer = new Timer();
}
private static final double defaultDeviation = 7;

@Test
public void testFalseShouldBeReturnedIfConditionIsNotMetAndDefaultTimeoutIsOver(){
long timeoutCondition = getTimeoutConfig().getCondition();

Timer timer = new Timer();
boolean result = ConditionalWait.waitForTrue(() ->
{
timer.start();
return false;
}, "Condition should be true");
double duration = timer.stop();
DurationSample durationSample = new DurationSample(timer.duration(), timeoutCondition, defaultDeviation);

assertFalse(result);
assertTrue(duration > timeoutCondition && duration < 2 * timeoutCondition);
assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
}

@Test
public void testTimeoutExceptionShouldBeThrownIfConditionIsMetAndTimeoutIsOver(){
Timer timer = new Timer();
try {
ConditionalWait.waitForTrue(() ->
{
timer.start();
return false;
}, waitForTimeoutCondition, waitForTimeoutPolling,"Condition should be true");
} catch (TimeoutException e) {
double duration = timer.stop();
assertTrue(duration > waitForTimeoutCondition && duration < 2 * waitForTimeoutCondition);
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition, defaultDeviation);
assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
}
}

@Test
public void testTimeoutExceptionShouldNotBeThrownIfConditionIsMetAndDefaultTimeoutIsNotOver(){
long timeoutCondition = getTimeoutConfig().getCondition();
Timer timer = new Timer();

boolean result = ConditionalWait.waitForTrue(() ->
{
timer.start();
return true;
}, "Timeout exception should not be thrown");
double duration = timer.stop();
DurationSample durationSample = new DurationSample(timer.duration(), timeoutCondition);

assertTrue(result);
assertTrue(duration < timeoutCondition);
assertTrue(durationSample.getDuration() < timeoutCondition);
}

@Test
public void testTimeoutExceptionShouldNotBeThrownIfConditionMetAndTimeoutIsNotOver() throws TimeoutException {
Timer timer = new Timer();

ConditionalWait.waitForTrue(() ->
{
timer.start();
return true;
}, waitForTimeoutCondition, waitForTimeoutPolling, "Timeout exception should not be thrown");
double duration = timer.stop();

assertTrue(duration < waitForTimeoutCondition);
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition);
assertTrue(durationSample.getDuration() < waitForTimeoutCondition);
}

@Test(expectedExceptions = IllegalArgumentException.class)
Expand All @@ -88,6 +88,8 @@ public void testNullCannotBePassedAsCondition(){
@Test
public void testTimeoutExceptionShouldBeThrownIfDriverConditionIsNotMetAndDefaultTimeoutIsOver(){
long timeoutCondition = getTimeoutConfig().getCondition();
Timer timer = new Timer();

try{
ConditionalWait.waitFor((driver) ->
{
Expand All @@ -97,14 +99,17 @@ public void testTimeoutExceptionShouldBeThrownIfDriverConditionIsNotMetAndDefaul
"Condition should be true");

}catch (org.openqa.selenium.TimeoutException e){
double duration = timer.stop();
DurationSample durationSample = new DurationSample(timer.duration(), timeoutCondition, defaultDeviation);
BrowserManager.getBrowser().quit();

assertTrue(duration > timeoutCondition && duration < 2 * timeoutCondition);
assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
}
}

@Test
public void testTimeoutExceptionShouldBeThrownIfDriverConditionIsNotMetAndTimeoutIsOver(){
Timer timer = new Timer();

try{
ConditionalWait.waitFor((driver) ->
{
Expand All @@ -114,28 +119,33 @@ public void testTimeoutExceptionShouldBeThrownIfDriverConditionIsNotMetAndTimeou
"Conditional should be true", Collections.singleton(StaleElementReferenceException.class));

}catch (org.openqa.selenium.TimeoutException e){
double duration = timer.stop();

assertTrue(duration > waitForTimeoutCondition && duration < 2 * waitForTimeoutCondition);
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition, defaultDeviation);
BrowserManager.getBrowser().quit();

assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
}
}

@Test
public void testTimeoutExceptionShouldNotBeThrownIfDriverConditionIsMetAndDefaultTimeoutIsNotOver(){
Timer timer = new Timer();

ConditionalWait.waitFor((driver) ->
{
timer.start();
return true;
},
"Conditional should be true");
double duration = timer.stop();
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition);
BrowserManager.getBrowser().quit();

assertTrue(duration < getTimeoutConfig().getCondition());
assertTrue(durationSample.getDuration() < getTimeoutConfig().getCondition());
}

@Test
public void testExceptionShouldBeCatchedConditionIsMetAndDefaultTimeoutIsNotOver(){
Timer timer = new Timer();

try{
ConditionalWait.waitFor((driver) ->
{
Expand All @@ -144,23 +154,27 @@ public void testExceptionShouldBeCatchedConditionIsMetAndDefaultTimeoutIsNotOver
}, waitForTimeoutCondition, waitForTimeoutPolling,
"Conditional should be true", Collections.singleton(IllegalArgumentException.class));
} catch (org.openqa.selenium.TimeoutException e){
double duration = timer.stop();
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition, defaultDeviation);
BrowserManager.getBrowser().quit();

assertTrue(duration > waitForTimeoutCondition && duration < 2 * waitForTimeoutCondition);
assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
}
}

@Test
public void testTimeoutExceptionShouldNotBeThrownIfDriverConditionIsMetAndTimeoutIsNotOver(){
Timer timer = new Timer();

ConditionalWait.waitFor((driver) ->
{
timer.start();
return true;
}, waitForTimeoutCondition, waitForTimeoutPolling,
"Conditional should be true", Collections.singleton(IllegalArgumentException.class));
double duration = timer.stop();
DurationSample durationSample = new DurationSample(timer.duration(), waitForTimeoutCondition);
BrowserManager.getBrowser().quit();

assertTrue(duration < waitForTimeoutCondition);
assertTrue(durationSample.getDuration() < waitForTimeoutCondition);
}

private ITimeoutConfiguration getTimeoutConfig(){
Expand Down
8 changes: 7 additions & 1 deletion src/test/java/tests/integration/ActionTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import aquality.selenium.elements.actions.JsActions;
import aquality.selenium.elements.interfaces.IButton;
import aquality.selenium.elements.interfaces.ITextBox;
import aquality.selenium.waitings.ConditionalWait;
import automationpractice.forms.ProductForm;
import automationpractice.forms.ProductListForm;
import org.openqa.selenium.Keys;
Expand Down Expand Up @@ -50,8 +51,13 @@ public void testMoveMouseToElement() {
@Test
public void testMoveMouseFromElement() {
ProductListForm productListForm = new ProductListForm();

Assert.assertTrue(ConditionalWait.waitForTrue(() -> {
IButton button = productListForm.getBtnLastProductMoreFocused();
return button.getText().contains("More");
}, "element is not focused after moveMouseToElement()"));

IButton button = productListForm.getBtnLastProductMoreFocused();
Assert.assertTrue(button.getText().contains("More"), "element is not focused after moveMouseToElement()");
productListForm.getLblLastProduct().getMouseActions().moveMouseFromElement();
Assert.assertFalse(button.state().isDisplayed(), "element is still focused after moveMouseFromElement()");
}
Expand Down
28 changes: 15 additions & 13 deletions src/test/java/tests/integration/BrowserTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,20 @@
import theinternet.TheInternetPage;
import theinternet.forms.DynamicContentForm;
import theinternet.forms.FormAuthenticationForm;
import utils.TimeUtil;
import utils.DurationSample;
import utils.Timer;

import java.io.IOException;
import java.io.UncheckedIOException;

import static automationpractice.Constants.URL_AUTOMATIONPRACTICE;
import static utils.FileUtil.getResourceFileByName;
import static utils.TimeUtil.getCurrentTimeInSeconds;


public class BrowserTests extends BaseTest {

private static final double defaultDeviation = 3;

@Test
public void testShouldBePossibleToStartBrowserAndNavigate(){
getBrowser().goTo(TheInternetPage.LOGIN.getAddress());
Expand Down Expand Up @@ -108,13 +110,14 @@ public void testShouldBePossibleToExecuteJavaScriptAsync(){
getBrowser().waitForPageToLoad();

long expectedDurationInSeconds = 1;
long operationDurationInSeconds = 1;
double startTimeSeconds = TimeUtil.getCurrentTimeInSeconds();

Timer timer = new Timer();
timer.start();
getBrowser().executeAsyncScript(getAsyncTimeoutJavaScript(expectedDurationInSeconds));
double durationSeconds = TimeUtil.getCurrentTimeInSeconds() - startTimeSeconds;

Assert.assertTrue(durationSeconds < (expectedDurationInSeconds + operationDurationInSeconds) &&
durationSeconds >= expectedDurationInSeconds);
DurationSample durationSample = new DurationSample(timer.duration(), expectedDurationInSeconds, defaultDeviation);

Assert.assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
}

@Test (expectedExceptions = ScriptTimeoutException.class)
Expand Down Expand Up @@ -186,18 +189,17 @@ public void testShouldBePossibleToGetBrowserName() {
@Test
public void testShouldBePossibleToSetImplicitWait(){
long waitTime = 5L;
long operationTime = 2L;
getBrowser().setImplicitWaitTimeout(waitTime);

double startTime = getCurrentTimeInSeconds();
double endTime = 0L;
Timer timer = new Timer();
timer.start();
DurationSample durationSample = null;
try{
getBrowser().getDriver().findElement(By.id("not_exist_element"));
}catch (NoSuchElementException e){
endTime = getCurrentTimeInSeconds();
durationSample = new DurationSample(timer.duration(), waitTime, defaultDeviation);
}
Assert.assertTrue((endTime - startTime) < waitTime + operationTime);
Assert.assertTrue((endTime - startTime) >= waitTime);
Assert.assertTrue(durationSample.isDurationBetweenLimits(), durationSample.toString());
}

@Test
Expand Down
Loading