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); + } + } } }