diff --git a/java/client/src/com/thoughtworks/selenium/Wait.java b/java/client/src/com/thoughtworks/selenium/Wait.java index fe1cefc999b13..cf6915af607e7 100644 --- a/java/client/src/com/thoughtworks/selenium/Wait.java +++ b/java/client/src/com/thoughtworks/selenium/Wait.java @@ -33,6 +33,8 @@ * * * @author Dan Fabulich + * + * @deprecated Moved to com.thoughtworks.selenium.webdriven * */ public abstract class Wait { diff --git a/java/client/src/com/thoughtworks/selenium/webdriven/Wait.java b/java/client/src/com/thoughtworks/selenium/webdriven/Wait.java new file mode 100644 index 0000000000000..041930c23d56a --- /dev/null +++ b/java/client/src/com/thoughtworks/selenium/webdriven/Wait.java @@ -0,0 +1,118 @@ +/* +Copyright 2006-2014 Selenium committers +Copyright 2006-2014 Software Freedom Conservancy + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +package com.thoughtworks.selenium.webdriven; + +/** + * A utility class, designed to help the user automatically wait until a condition turns true. + * + * Use it like this: + * + *

+ * new Wait("Couldn't find close button!") {
+ *     boolean until() {
+ *         return selenium.isElementPresent("button_Close");
+ *     }
+ * };
+ *

+ */ +public abstract class Wait { + public Wait() { + } + + public Wait(String messageToShowIfTimeout) { + wait(messageToShowIfTimeout, DEFAULT_TIMEOUT, DEFAULT_INTERVAL); + } + + /** Returns true when it's time to stop waiting */ + public abstract boolean until(); + + /** The amount of time to wait before giving up; the default is 30 seconds */ + public static final long DEFAULT_TIMEOUT = 30000L; + + /** The interval to pause between checking; the default is 500 milliseconds */ + public static final long DEFAULT_INTERVAL = 500L; + + /** + * Wait until the "until" condition returns true or time runs out. + * + * @param message the failure message + * @throws WaitTimedOutException if "until" doesn't return true until the timeout + * @see #until() + */ + public void wait(String message) { + wait(message, DEFAULT_TIMEOUT, DEFAULT_INTERVAL); + } + + /** + * Wait until the "until" condition returns true or time runs out. + * + * @param message the failure message + * @param timeoutInMilliseconds the amount of time to wait before giving up + * @throws WaitTimedOutException if "until" doesn't return true until the timeout + * @see #until() + */ + public void wait(String message, long timeoutInMilliseconds) { + wait(message, timeoutInMilliseconds, DEFAULT_INTERVAL); + } + + /** + * Wait until the "until" condition returns true or time runs out. + * + * @param message the failure message + * @param timeoutInMilliseconds the amount of time to wait before giving up + * @param intervalInMilliseconds the interval to pause between checking "until" + * @throws WaitTimedOutException if "until" doesn't return true until the timeout + * @see #until() + */ + public void wait(String message, long timeoutInMilliseconds, long intervalInMilliseconds) { + long start = System.currentTimeMillis(); + long end = start + timeoutInMilliseconds; + while (System.currentTimeMillis() < end) { + if (until()) return; + try { + Thread.sleep(intervalInMilliseconds); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + throw new WaitTimedOutException(message); + } + + public class WaitTimedOutException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public WaitTimedOutException() { + super(); + } + + public WaitTimedOutException(String message, Throwable cause) { + super(message, cause); + } + + public WaitTimedOutException(String message) { + super(message); + } + + public WaitTimedOutException(Throwable cause) { + super(cause); + } + + } +} diff --git a/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForCondition.java b/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForCondition.java index 385075ebbb3f0..61f1dd03c73f0 100644 --- a/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForCondition.java +++ b/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForCondition.java @@ -17,7 +17,7 @@ package com.thoughtworks.selenium.webdriven.commands; -import com.thoughtworks.selenium.Wait; +import com.thoughtworks.selenium.webdriven.Wait; import com.thoughtworks.selenium.webdriven.ScriptMutator; import com.thoughtworks.selenium.webdriven.SeleneseCommand; diff --git a/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForPageToLoad.java b/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForPageToLoad.java index ac00bcd366fca..875a29a76c3a8 100644 --- a/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForPageToLoad.java +++ b/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForPageToLoad.java @@ -18,7 +18,7 @@ import com.google.common.base.Throwables; -import com.thoughtworks.selenium.Wait; +import com.thoughtworks.selenium.webdriven.Wait; import com.thoughtworks.selenium.webdriven.SeleneseCommand; import org.openqa.selenium.By; diff --git a/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForPopup.java b/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForPopup.java index bae9c2b7e0957..522246bb7b6ab 100644 --- a/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForPopup.java +++ b/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForPopup.java @@ -17,7 +17,7 @@ package com.thoughtworks.selenium.webdriven.commands; import com.thoughtworks.selenium.SeleniumException; -import com.thoughtworks.selenium.Wait; +import com.thoughtworks.selenium.webdriven.Wait; import com.thoughtworks.selenium.webdriven.SeleneseCommand; import com.thoughtworks.selenium.webdriven.Windows; diff --git a/java/client/test/com/thoughtworks/selenium/WaitTest.java b/java/client/test/com/thoughtworks/selenium/WaitTest.java index 8ae2f9a3acdc9..915c57fa818dd 100644 --- a/java/client/test/com/thoughtworks/selenium/WaitTest.java +++ b/java/client/test/com/thoughtworks/selenium/WaitTest.java @@ -21,7 +21,8 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.thoughtworks.selenium.Wait.WaitTimedOutException; +import com.thoughtworks.selenium.webdriven.Wait; +import com.thoughtworks.selenium.webdriven.Wait.WaitTimedOutException; import org.junit.Before; import org.junit.Test; diff --git a/java/client/test/org/openqa/selenium/v1/WebDriverBackedSeleniumLargeTest.java b/java/client/test/org/openqa/selenium/v1/WebDriverBackedSeleniumLargeTest.java index 03eeb049c2be3..90f0c3e24a387 100644 --- a/java/client/test/org/openqa/selenium/v1/WebDriverBackedSeleniumLargeTest.java +++ b/java/client/test/org/openqa/selenium/v1/WebDriverBackedSeleniumLargeTest.java @@ -20,7 +20,7 @@ import static org.junit.Assert.fail; import com.thoughtworks.selenium.Selenium; -import com.thoughtworks.selenium.Wait; +import com.thoughtworks.selenium.webdriven.Wait; import com.thoughtworks.selenium.webdriven.WebDriverBackedSelenium; import org.junit.Before;