diff --git a/htmlelements-java/src/main/java/ru/yandex/qatools/htmlelements/loader/decorator/proxyhandlers/WebElementNamedProxyHandler.java b/htmlelements-java/src/main/java/ru/yandex/qatools/htmlelements/loader/decorator/proxyhandlers/WebElementNamedProxyHandler.java
index 4f96b2d1..64b5acd9 100644
--- a/htmlelements-java/src/main/java/ru/yandex/qatools/htmlelements/loader/decorator/proxyhandlers/WebElementNamedProxyHandler.java
+++ b/htmlelements-java/src/main/java/ru/yandex/qatools/htmlelements/loader/decorator/proxyhandlers/WebElementNamedProxyHandler.java
@@ -36,18 +36,18 @@ public Object invoke(Object o, Method method, Object[] objects) throws Throwable
return name;
}
- long end = this.clock.laterBy(TimeUnit.SECONDS.toMillis(this.timeOutInSeconds));
+ final long end = this.clock.laterBy(TimeUnit.SECONDS.toMillis(this.timeOutInSeconds));
- StaleElementReferenceException lasException = null;
- while (this.clock.isNowBefore(end)) {
+ StaleElementReferenceException lastException;
+ do {
try {
return super.invoke(o, method, objects);
} catch (StaleElementReferenceException e) {
- lasException = e;
+ lastException = e;
this.waitFor();
}
- }
- throw lasException;
+ } while (this.clock.isNowBefore(end));
+ throw lastException;
}
protected long sleepFor() {
diff --git a/htmlelements-java/src/test/java/ru/yandex/qatools/htmlelements/HtmlElementLocatorTimeoutTest.java b/htmlelements-java/src/test/java/ru/yandex/qatools/htmlelements/HtmlElementLocatorTimeoutTest.java
index 7e062126..a649b73c 100644
--- a/htmlelements-java/src/test/java/ru/yandex/qatools/htmlelements/HtmlElementLocatorTimeoutTest.java
+++ b/htmlelements-java/src/test/java/ru/yandex/qatools/htmlelements/HtmlElementLocatorTimeoutTest.java
@@ -44,7 +44,17 @@ public void classFieldsTimeout() throws NoSuchFieldException {
@Test
public void timeoutWithSystemProperty() {
- System.setProperty("webdriver.timeouts.implicitlywait", "1");
- Assert.assertEquals(1, factory.getTimeOut(HtmlElement.class));
+ final String propertyName = "webdriver.timeouts.implicitlywait";
+ final String previousTimeout = System.getProperty(propertyName);
+ System.setProperty(propertyName, "1");
+ try {
+ Assert.assertEquals(1, factory.getTimeOut(HtmlElement.class));
+ } finally {
+ if (previousTimeout == null) {
+ System.getProperties().remove(propertyName);
+ } else {
+ System.setProperty(propertyName, previousTimeout);
+ }
+ }
}
}