diff --git a/serenity-core/src/main/java/net/serenitybdd/core/exceptions/SerenityWebDriverException.java b/serenity-core/src/main/java/net/serenitybdd/core/exceptions/SerenityManagedException.java
similarity index 69%
rename from serenity-core/src/main/java/net/serenitybdd/core/exceptions/SerenityWebDriverException.java
rename to serenity-core/src/main/java/net/serenitybdd/core/exceptions/SerenityManagedException.java
index 72c02467e0..48de4b3961 100644
--- a/serenity-core/src/main/java/net/serenitybdd/core/exceptions/SerenityWebDriverException.java
+++ b/serenity-core/src/main/java/net/serenitybdd/core/exceptions/SerenityManagedException.java
@@ -3,7 +3,7 @@
import org.openqa.selenium.WebDriverException;
-public class SerenityWebDriverException extends WebDriverException {
+public class SerenityManagedException extends RuntimeException {
private final String detailedMessage;
private final StackTraceElement[] stackTrace;
@@ -14,27 +14,27 @@ public class SerenityWebDriverException extends WebDriverException {
public static Throwable detachedCopyOf(Throwable testErrorException) {
if (!(testErrorException instanceof WebDriverException)) {
return testErrorException;
- } else if (testErrorException instanceof SerenityWebDriverException) {
+ } else if (testErrorException instanceof SerenityManagedException) {
return testErrorException;
} else {
- return new SerenityWebDriverException((WebDriverException) testErrorException);
+ return new SerenityManagedException(testErrorException);
}
}
- public SerenityWebDriverException(WebDriverException testErrorException) {
- super(testErrorException.getCause());
+ public SerenityManagedException(Throwable testErrorException) {
+ super(testErrorException);
this.detailedMessage = testErrorException.getMessage();
this.stackTrace = testErrorException.getStackTrace();
this.cause = testErrorException.getCause();
this.exceptionClass = testErrorException.getClass();
}
- public SerenityWebDriverException(String message, WebDriverException testErrorException) {
- super(testErrorException.getCause());
+ public SerenityManagedException(String message, Throwable testErrorException) {
+ super(testErrorException);
this.detailedMessage = message;
this.stackTrace = testErrorException.getStackTrace();
- this.cause = testErrorException.getCause();
+ this.cause = testErrorException.getCause();
this.exceptionClass = testErrorException.getClass();
}
diff --git a/serenity-core/src/main/java/net/thucydides/core/model/TestOutcome.java b/serenity-core/src/main/java/net/thucydides/core/model/TestOutcome.java
index 789aa7209c..c888cff97c 100644
--- a/serenity-core/src/main/java/net/thucydides/core/model/TestOutcome.java
+++ b/serenity-core/src/main/java/net/thucydides/core/model/TestOutcome.java
@@ -8,7 +8,7 @@
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-import net.serenitybdd.core.exceptions.SerenityWebDriverException;
+import net.serenitybdd.core.exceptions.SerenityManagedException;
import net.serenitybdd.core.model.FailureDetails;
import net.serenitybdd.core.time.SystemClock;
import net.thucydides.core.ThucydidesSystemProperty;
@@ -1112,7 +1112,7 @@ public void setUserStory(Story story) {
public void determineTestFailureCause(Throwable cause) {
if (cause != null) {
- RootCauseAnalyzer rootCauseAnalyser = new RootCauseAnalyzer(SerenityWebDriverException.detachedCopyOf(cause));
+ RootCauseAnalyzer rootCauseAnalyser = new RootCauseAnalyzer(SerenityManagedException.detachedCopyOf(cause));
FailureCause rootCause = rootCauseAnalyser.getRootCause();
this.testFailureClassname = rootCauseAnalyser.getRootCause().getErrorType();
this.testFailureMessage = rootCauseAnalyser.getMessage();
diff --git a/serenity-core/src/main/java/net/thucydides/core/model/stacktrace/FailureCause.java b/serenity-core/src/main/java/net/thucydides/core/model/stacktrace/FailureCause.java
index 84c12f0b27..3a1cd046ff 100644
--- a/serenity-core/src/main/java/net/thucydides/core/model/stacktrace/FailureCause.java
+++ b/serenity-core/src/main/java/net/thucydides/core/model/stacktrace/FailureCause.java
@@ -2,7 +2,7 @@
import com.google.common.base.Optional;
import com.google.common.base.Splitter;
-import net.serenitybdd.core.exceptions.SerenityWebDriverException;
+import net.serenitybdd.core.exceptions.SerenityManagedException;
import net.serenitybdd.core.exceptions.UnrecognisedException;
import net.thucydides.core.model.TestFailureException;
import net.thucydides.core.util.NameConverter;
@@ -36,8 +36,8 @@ public FailureCause(Throwable cause, StackTraceElement[] stackTrace) {
}
private static String exceptionClassName(Throwable cause) {
- if (cause instanceof SerenityWebDriverException) {
- return ((SerenityWebDriverException) cause).getExceptionClass().getName();
+ if (cause instanceof SerenityManagedException) {
+ return ((SerenityManagedException) cause).getExceptionClass().getName();
} else {
return cause.getClass().getName();
}
diff --git a/serenity-core/src/main/java/net/thucydides/core/model/stacktrace/RootCauseAnalyzer.java b/serenity-core/src/main/java/net/thucydides/core/model/stacktrace/RootCauseAnalyzer.java
index 8d0b7a19e5..f6fbdaf7a9 100644
--- a/serenity-core/src/main/java/net/thucydides/core/model/stacktrace/RootCauseAnalyzer.java
+++ b/serenity-core/src/main/java/net/thucydides/core/model/stacktrace/RootCauseAnalyzer.java
@@ -1,6 +1,6 @@
package net.thucydides.core.model.stacktrace;
-import net.serenitybdd.core.exceptions.SerenityWebDriverException;
+import net.serenitybdd.core.exceptions.SerenityManagedException;
import net.thucydides.core.guice.Injectors;
import net.thucydides.core.model.failures.FailureAnalysis;
import net.thucydides.core.util.EnvironmentVariables;
@@ -30,7 +30,7 @@ public FailureCause getRootCause() {
private Throwable originalExceptionFrom(Throwable thrownException) {
- if (!(thrownException instanceof WebdriverAssertionError) && ((thrownException instanceof SerenityWebDriverException) || (thrownException instanceof AssertionError))){
+ if (!(thrownException instanceof WebdriverAssertionError) && ((thrownException instanceof SerenityManagedException) || (thrownException instanceof AssertionError))){
return thrownException;
}
if (failureAnalysis.reportAsCompromised(thrownException.getClass())) {
diff --git a/serenity-core/src/main/java/net/thucydides/core/steps/ErrorConvertor.java b/serenity-core/src/main/java/net/thucydides/core/steps/ErrorConvertor.java
index e7cd456121..77081fbff2 100644
--- a/serenity-core/src/main/java/net/thucydides/core/steps/ErrorConvertor.java
+++ b/serenity-core/src/main/java/net/thucydides/core/steps/ErrorConvertor.java
@@ -1,6 +1,6 @@
package net.thucydides.core.steps;
-import net.thucydides.core.webdriver.WebdriverAssertionError;
+import net.serenitybdd.core.exceptions.SerenityManagedException;
import java.io.Serializable;
@@ -19,7 +19,8 @@ public Throwable convertToAssertion() {
if (RuntimeException.class.isAssignableFrom(throwable.getClass())) {
return throwable;
} else {
- return new WebdriverAssertionError(throwable);
+// return new WebdriverAssertionError(throwable);
+ return new SerenityManagedException(throwable);
}
}
}
\ No newline at end of file
diff --git a/serenity-core/src/main/java/net/thucydides/core/steps/StepFailure.java b/serenity-core/src/main/java/net/thucydides/core/steps/StepFailure.java
index 4fcfd405c9..99fe08ad6d 100644
--- a/serenity-core/src/main/java/net/thucydides/core/steps/StepFailure.java
+++ b/serenity-core/src/main/java/net/thucydides/core/steps/StepFailure.java
@@ -1,6 +1,8 @@
package net.thucydides.core.steps;
+import net.serenitybdd.core.exceptions.SerenityManagedException;
+
/**
* Description and underlying cause behind a step failure.
* A StepFailure
holds a description of the failed test step and the
@@ -21,9 +23,15 @@ public StepFailure(final ExecutedStepDescription description, final Throwable ca
this.description = description;
this.cause = cause;
if (cause != null) {
- this.exceptionClass = cause.getClass();
- this.message = cause.getMessage();
- this.stackTraceElements = cause.getStackTrace();
+ if (cause instanceof SerenityManagedException) {
+ this.exceptionClass = ((SerenityManagedException)cause).getExceptionClass();
+ this.message = cause.getMessage();
+ this.stackTraceElements = ((SerenityManagedException)cause).getStackTrace();
+ } else {
+ this.exceptionClass = cause.getClass();
+ this.message = cause.getMessage();
+ this.stackTraceElements = cause.getStackTrace();
+ }
} else {
this.exceptionClass = null;
this.message = null;
diff --git a/serenity-core/src/main/java/net/thucydides/core/steps/StepInterceptor.java b/serenity-core/src/main/java/net/thucydides/core/steps/StepInterceptor.java
index ed77e839a0..45e2de154a 100644
--- a/serenity-core/src/main/java/net/thucydides/core/steps/StepInterceptor.java
+++ b/serenity-core/src/main/java/net/thucydides/core/steps/StepInterceptor.java
@@ -7,7 +7,7 @@
import net.serenitybdd.core.PendingStepException;
import net.serenitybdd.core.Serenity;
import net.serenitybdd.core.SkipNested;
-import net.serenitybdd.core.exceptions.SerenityWebDriverException;
+import net.serenitybdd.core.exceptions.SerenityManagedException;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import net.thucydides.core.ThucydidesSystemProperty;
@@ -257,7 +257,7 @@ private boolean shouldRunInDryRunMode(final Method methodOrStep, final Class cal
}
public void reportMethodError(Throwable generalException, Object obj, Method method, Object[] args) throws Throwable {
- error = SerenityWebDriverException.detachedCopyOf(generalException);
+ error = SerenityManagedException.detachedCopyOf(generalException);
Throwable assertionError = forError(error).convertToAssertion();
notifyStepStarted(obj, method, args);
notifyOfStepFailure(obj, method, args, assertionError);
@@ -268,7 +268,7 @@ private Object invokeMethodAndNotifyFailures(Object obj, Method method, Object[]
try {
result = invokeMethod(obj, args, proxy);
} catch (Throwable generalException) {
- error = SerenityWebDriverException.detachedCopyOf(generalException);
+ error = SerenityManagedException.detachedCopyOf(generalException);
Throwable assertionError = forError(error).convertToAssertion();
notifyStepStarted(obj, method, args);
notifyOfStepFailure(obj, method, args, assertionError);
@@ -314,7 +314,7 @@ private Object runTestStep(final Object obj, final Method method,
} catch (AssumptionViolatedException assumptionFailed) {
result = appropriateReturnObject(obj, method);
} catch (Throwable testErrorException) {
- error = SerenityWebDriverException.detachedCopyOf(testErrorException);
+ error = SerenityManagedException.detachedCopyOf(testErrorException);
logStepFailure(obj, method, args, forError(error).convertToAssertion());
result = appropriateReturnObject(obj, method);
}
diff --git a/serenity-core/src/main/java/net/thucydides/core/webdriver/WebDriverFactory.java b/serenity-core/src/main/java/net/thucydides/core/webdriver/WebDriverFactory.java
index a06f3f1fe2..258779fb3f 100644
--- a/serenity-core/src/main/java/net/thucydides/core/webdriver/WebDriverFactory.java
+++ b/serenity-core/src/main/java/net/thucydides/core/webdriver/WebDriverFactory.java
@@ -4,7 +4,7 @@
import com.google.common.base.Preconditions;
import io.appium.java_client.AppiumDriver;
import net.serenitybdd.core.Serenity;
-import net.serenitybdd.core.exceptions.SerenityWebDriverException;
+import net.serenitybdd.core.exceptions.SerenityManagedException;
import net.serenitybdd.core.pages.DefaultTimeouts;
import net.serenitybdd.core.pages.PageObject;
import net.thucydides.core.ThucydidesSystemProperty;
@@ -195,7 +195,7 @@ protected synchronized WebDriver newWebdriverInstance(final Class extends WebD
activateJavascriptSupportFor(driver);
return driver;
- } catch (SerenityWebDriverException toPassThrough) {
+ } catch (SerenityManagedException toPassThrough) {
throw toPassThrough;
} catch (Exception cause) {
throw new UnsupportedDriverException("Could not instantiate " + driverClass, cause);
diff --git a/serenity-core/src/main/java/net/thucydides/core/webdriver/WebdriverInstanceFactory.java b/serenity-core/src/main/java/net/thucydides/core/webdriver/WebdriverInstanceFactory.java
index d9758d3335..4c51d6b072 100644
--- a/serenity-core/src/main/java/net/thucydides/core/webdriver/WebdriverInstanceFactory.java
+++ b/serenity-core/src/main/java/net/thucydides/core/webdriver/WebdriverInstanceFactory.java
@@ -4,7 +4,7 @@
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.ios.IOSDriver;
import net.serenitybdd.core.buildinfo.DriverCapabilityRecord;
-import net.serenitybdd.core.exceptions.SerenityWebDriverException;
+import net.serenitybdd.core.exceptions.SerenityManagedException;
import net.thucydides.core.guice.Injectors;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.WebDriver;
@@ -42,7 +42,7 @@ public WebDriver newRemoteDriver(URL remoteUrl, Capabilities capabilities) {
return driver;
} catch (UnreachableBrowserException unreachableBrowser) {
String errorMessage = unreachableBrowserErrorMessage(unreachableBrowser);
- throw new SerenityWebDriverException(errorMessage, unreachableBrowser);
+ throw new SerenityManagedException(errorMessage, unreachableBrowser);
}
}
diff --git a/serenity-core/src/test/groovy/net/thucydides/core/webdriver/WhenConfiguringTheWebdriverInstance.groovy b/serenity-core/src/test/groovy/net/thucydides/core/webdriver/WhenConfiguringTheWebdriverInstance.groovy
index 9c49bfee43..e136243778 100644
--- a/serenity-core/src/test/groovy/net/thucydides/core/webdriver/WhenConfiguringTheWebdriverInstance.groovy
+++ b/serenity-core/src/test/groovy/net/thucydides/core/webdriver/WhenConfiguringTheWebdriverInstance.groovy
@@ -1,7 +1,7 @@
package net.thucydides.core.webdriver
import com.opera.core.systems.OperaDriver
-import net.serenitybdd.core.exceptions.SerenityWebDriverException
+import net.serenitybdd.core.exceptions.SerenityManagedException
import net.thucydides.core.util.MockEnvironmentVariables
import org.openqa.selenium.Capabilities
import org.openqa.selenium.WebDriver
@@ -141,7 +141,7 @@ class WhenConfiguringTheWebdriverInstance extends Specification {
def webDriverFactory = new WebDriverFactory(new WebdriverInstanceFactory(), environmentVariables)
webDriverFactory.newInstanceOf(SupportedWebDriver.REMOTE)
then:
- def e = thrown(SerenityWebDriverException)
+ def e = thrown(SerenityManagedException)
e.message.contains("Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.")
e.message.contains("UnknownHostException - host-does-not-exist")
}
diff --git a/serenity-core/src/test/java/net/thucydides/core/steps/WhenRunningStepsThroughAScenarioProxy.java b/serenity-core/src/test/java/net/thucydides/core/steps/WhenRunningStepsThroughAScenarioProxy.java
index 93222a88bc..933a7f39f4 100644
--- a/serenity-core/src/test/java/net/thucydides/core/steps/WhenRunningStepsThroughAScenarioProxy.java
+++ b/serenity-core/src/test/java/net/thucydides/core/steps/WhenRunningStepsThroughAScenarioProxy.java
@@ -1,6 +1,6 @@
package net.thucydides.core.steps;
-import net.serenitybdd.core.exceptions.SerenityWebDriverException;
+import net.serenitybdd.core.exceptions.SerenityManagedException;
import net.thucydides.core.annotations.*;
import net.thucydides.core.model.TestOutcome;
import net.thucydides.core.pages.Pages;
@@ -642,7 +642,7 @@ public void the_proxy_should_notify_listeners_with_a_description_and_a_cause_whe
verify(listener).stepFailed(argument.capture());
assertThat(argument.getValue().getDescription().getStepClass().getName(), is(SimpleTestScenarioSteps.class.getName()));
assertThat(argument.getValue().getDescription().getName(), is("failing_web_step"));
- assertThat(argument.getValue().getException().getClass().getName(), is(SerenityWebDriverException.class.getName()));
+ assertThat(argument.getValue().getException().getClass().getName(), is(SerenityManagedException.class.getName()));
verify(listener, times(1)).stepFailed(any(StepFailure.class));
@@ -665,7 +665,7 @@ public void the_proxy_should_notify_listeners_with_a_description_and_a_cause_whe
ArgumentCaptor argument = ArgumentCaptor.forClass(StepFailure.class);
verify(listener).stepFailed(argument.capture());
- assertThat(argument.getValue().getMessage(), is("java.lang.AssertionError: Oops!"));
+ assertThat(argument.getValue().getMessage(), is("Oops!"));
}
@Test
diff --git a/serenity-rest-assured/src/main/java/net/serenitybdd/rest/SerenityRest.java b/serenity-rest-assured/src/main/java/net/serenitybdd/rest/SerenityRest.java
index fd24d0cfd0..891112f69d 100644
--- a/serenity-rest-assured/src/main/java/net/serenitybdd/rest/SerenityRest.java
+++ b/serenity-rest-assured/src/main/java/net/serenitybdd/rest/SerenityRest.java
@@ -13,7 +13,7 @@
import com.jayway.restassured.specification.RequestSpecification;
import com.jayway.restassured.specification.ResponseSpecification;
import net.serenitybdd.core.Serenity;
-import net.serenitybdd.core.exceptions.SerenityWebDriverException;
+import net.serenitybdd.core.exceptions.SerenityManagedException;
import net.serenitybdd.core.rest.RestMethod;
import net.serenitybdd.core.rest.RestQuery;
import net.serenitybdd.rest.decorators.RestDecorator;
@@ -174,7 +174,7 @@ private static Object wrappedResult(Method method, Object target, Object[] args)
return result;
}
} catch (Exception generalException) {
- Throwable error = SerenityWebDriverException.detachedCopyOf(generalException.getCause());
+ Throwable error = SerenityManagedException.detachedCopyOf(generalException.getCause());
Throwable assertionError = forError(error).convertToAssertion();
notifyOfStepFailure(method, args, assertionError);
return stubbed(method);