Skip to content

Commit 4371fd1

Browse files
committed
Wait for node to be rendered in WaitUntilExists
1 parent c6c7a41 commit 4371fd1

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

src/main/java/javafxlibrary/matchers/ExtendedNodeMatchers.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
package javafxlibrary.matchers;
1919

20+
import javafx.geometry.Bounds;
2021
import javafx.scene.Node;
22+
import javafxlibrary.utils.HelperFunctions;
2123
import org.hamcrest.BaseMatcher;
2224
import org.hamcrest.Description;
2325
import org.hamcrest.Matcher;
@@ -49,4 +51,10 @@ private static boolean hoverable(Node node) {
4951
new javafxlibrary.keywords.Keywords.MoveRobot().moveTo(node);
5052
return node.isHover();
5153
}
54+
55+
public static boolean hasValidCoordinates(Node node) {
56+
Bounds bounds = HelperFunctions.objectToBounds(node);
57+
return !(Double.isNaN(bounds.getMinX()) || Double.isNaN(bounds.getMinY()) ||
58+
Double.isNaN(bounds.getMaxX()) || Double.isNaN(bounds.getMaxY()));
59+
}
5260
}

src/main/java/javafxlibrary/utils/HelperFunctions.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import java.util.regex.Matcher;
6262
import java.util.regex.Pattern;
6363

64+
import static javafxlibrary.matchers.ExtendedNodeMatchers.hasValidCoordinates;
6465
import static javafxlibrary.utils.TestFxAdapter.objectMap;
6566
import static javafxlibrary.utils.TestFxAdapter.robot;
6667
import static org.testfx.matcher.base.NodeMatchers.*;
@@ -76,18 +77,16 @@ public static Node waitUntilExists(String target) {
7677

7778
public static Node waitUntilExists(String target, int timeout, String timeUnit) {
7879
RobotLog.trace("Waiting until target \"" + target + "\" becomes existent, timeout="
79-
+ Integer.toString(timeout) + ", timeUnit=" + timeUnit);
80+
+ timeout + ", timeUnit=" + timeUnit);
8081

8182
try {
82-
83-
WaitForAsyncUtils.waitFor((long) timeout,
84-
getTimeUnit(timeUnit),
85-
() -> Matchers.is(isNotNull()).matches(createFinder().find(target)));
86-
return createFinder().find(target);
87-
83+
WaitForAsyncUtils.waitFor((long) timeout, getTimeUnit(timeUnit), () -> createFinder().find(target) != null);
84+
Node node = createFinder().find(target);
85+
WaitForAsyncUtils.waitFor((long) timeout, getTimeUnit(timeUnit), () -> hasValidCoordinates(node));
86+
return node;
8887
} catch (TimeoutException te) {
8988
throw new JavaFXLibraryNonFatalException("Given element \"" + target + "\" was not found within given timeout of "
90-
+ Integer.toString(timeout) + " " + timeUnit);
89+
+ timeout + " " + timeUnit);
9190
} catch (Exception e) {
9291
RobotLog.trace("Exception in waitUntilExists: " + e + "\n" + e.getCause().toString());
9392
throw new JavaFXLibraryNonFatalException("waitUntilExist failed: " + e);

0 commit comments

Comments
 (0)