From 03691bc8a84020cc0cfdb06331d8934d105230dc Mon Sep 17 00:00:00 2001 From: Justin Hickman Date: Tue, 15 Feb 2022 15:33:16 -0500 Subject: [PATCH 1/2] gwt-driver-8 - Added overloaded waitFor methods to support passing a timeout message --- .../gwt/gwtdriver/models/GwtWidgetFinder.java | 20 ++++++++++++++++- .../gwtdriver/models/SimpleWidgetTest.java | 22 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/vertispan/webdriver/gwt/gwtdriver/models/GwtWidgetFinder.java b/src/main/java/com/vertispan/webdriver/gwt/gwtdriver/models/GwtWidgetFinder.java index 0bd45ee..6d62111 100644 --- a/src/main/java/com/vertispan/webdriver/gwt/gwtdriver/models/GwtWidgetFinder.java +++ b/src/main/java/com/vertispan/webdriver/gwt/gwtdriver/models/GwtWidgetFinder.java @@ -28,6 +28,7 @@ import java.time.Duration; import java.time.temporal.TemporalUnit; +import java.util.function.Supplier; public class GwtWidgetFinder> { protected WebDriver driver; @@ -57,7 +58,15 @@ assert getClass() } public W waitFor() { - return waitFor(Duration.ofSeconds(10)); + return waitFor((Supplier) null); + } + + public W waitFor(String message) { + return waitFor(message == null ? null : () -> message); + } + + public W waitFor(Supplier messageSupplier) { + return waitFor(Duration.ofSeconds(10), messageSupplier); } public W waitFor(long duration, TemporalUnit unit) { @@ -65,8 +74,17 @@ public W waitFor(long duration, TemporalUnit unit) { } public W waitFor(Duration duration) { + return waitFor(duration, (Supplier) null); + } + + public W waitFor(Duration duration, String message) { + return waitFor(duration, message == null ? null : () -> message); + } + + public W waitFor(Duration duration, Supplier messageSupplier) { return new FluentWait<>(driver) .withTimeout(duration) + .withMessage(messageSupplier) .ignoring(NotFoundException.class) .until((Function) webDriver -> done()); } diff --git a/src/test/java/com/vertispan/webdriver/gwt/gwtdriver/models/SimpleWidgetTest.java b/src/test/java/com/vertispan/webdriver/gwt/gwtdriver/models/SimpleWidgetTest.java index b975e68..77ee897 100644 --- a/src/test/java/com/vertispan/webdriver/gwt/gwtdriver/models/SimpleWidgetTest.java +++ b/src/test/java/com/vertispan/webdriver/gwt/gwtdriver/models/SimpleWidgetTest.java @@ -38,11 +38,13 @@ import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.Point; +import org.openqa.selenium.TimeoutException; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.interactions.Actions; +import java.time.Duration; import java.util.List; import io.github.bonigarcia.wdm.WebDriverManager; @@ -219,4 +221,24 @@ void testFindDescedantWidgets() { assertEquals(5, elements.size()); System.out.println(elements.size()); } + + @Test + void waitTimeout() { + driver.get(url); + + WidgetContainer widget = new GwtRootPanel(driver); + assert widget.as(GwtRootPanel.class) != null; + + WebElement buttonlessPanel = driver.findElement(By.id("buttonless")); + String messageInTimeout = "This will be in the timeout message"; + + try { + GwtWidget.find(Button.class, driver, buttonlessPanel) + .withText("Test Button Doesnt Exist") + .waitFor(Duration.ofMillis(1), messageInTimeout); + fail("This should fail when it doesn't find the widget"); + } catch (TimeoutException e) { + assertTrue(e.getMessage().contains(messageInTimeout)); + } + } } From 0240954e32d044c457142f46c7b326ae7bce9660 Mon Sep 17 00:00:00 2001 From: Justin Hickman Date: Wed, 16 Feb 2022 15:26:30 -0500 Subject: [PATCH 2/2] gwt-driver-8 Small updates after rebase --- .../webdriver/gwt/gwtdriver/models/GwtWidgetFinder.java | 4 +++- .../webdriver/gwt/gwtdriver/models/SimpleWidgetTest.java | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/vertispan/webdriver/gwt/gwtdriver/models/GwtWidgetFinder.java b/src/main/java/com/vertispan/webdriver/gwt/gwtdriver/models/GwtWidgetFinder.java index 6d62111..97ab756 100644 --- a/src/main/java/com/vertispan/webdriver/gwt/gwtdriver/models/GwtWidgetFinder.java +++ b/src/main/java/com/vertispan/webdriver/gwt/gwtdriver/models/GwtWidgetFinder.java @@ -31,6 +31,8 @@ import java.util.function.Supplier; public class GwtWidgetFinder> { + public static final Duration DEFAULT_WAITFOR_DURATION = Duration.ofSeconds(10); + protected WebDriver driver; protected WebElement elt; @@ -66,7 +68,7 @@ public W waitFor(String message) { } public W waitFor(Supplier messageSupplier) { - return waitFor(Duration.ofSeconds(10), messageSupplier); + return waitFor(DEFAULT_WAITFOR_DURATION, messageSupplier); } public W waitFor(long duration, TemporalUnit unit) { diff --git a/src/test/java/com/vertispan/webdriver/gwt/gwtdriver/models/SimpleWidgetTest.java b/src/test/java/com/vertispan/webdriver/gwt/gwtdriver/models/SimpleWidgetTest.java index 77ee897..3a8c6a3 100644 --- a/src/test/java/com/vertispan/webdriver/gwt/gwtdriver/models/SimpleWidgetTest.java +++ b/src/test/java/com/vertispan/webdriver/gwt/gwtdriver/models/SimpleWidgetTest.java @@ -229,11 +229,10 @@ void waitTimeout() { WidgetContainer widget = new GwtRootPanel(driver); assert widget.as(GwtRootPanel.class) != null; - WebElement buttonlessPanel = driver.findElement(By.id("buttonless")); String messageInTimeout = "This will be in the timeout message"; try { - GwtWidget.find(Button.class, driver, buttonlessPanel) + GwtWidget.find(Button.class, driver) .withText("Test Button Doesnt Exist") .waitFor(Duration.ofMillis(1), messageInTimeout); fail("This should fail when it doesn't find the widget");