Skip to content

Commit 870814f

Browse files
committed
Improve reliability of scrollUnderFloatingHeader
1 parent 3faa1ef commit 870814f

1 file changed

Lines changed: 8 additions & 10 deletions

File tree

src/org/labkey/test/util/selenium/ScrollUtils.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import org.labkey.test.util.DataRegionTable;
88
import org.labkey.test.util.TestLogger;
99
import org.openqa.selenium.JavascriptExecutor;
10-
import org.openqa.selenium.Point;
1110
import org.openqa.selenium.Rectangle;
1211
import org.openqa.selenium.WebDriver;
1312
import org.openqa.selenium.WebElement;
@@ -47,9 +46,9 @@ public static boolean scrollUnderStickyFormButtons(WebElement webElement)
4746
return false;
4847
}
4948

50-
public static boolean scrollUnderFloatingHeader(WebElement webElement)
49+
public static boolean scrollUnderFloatingHeader(WebElement targetElement)
5150
{
52-
WebDriver webDriver = extractWebDriver(webElement);
51+
WebDriver webDriver = extractWebDriver(targetElement);
5352

5453
List<WebElement> floatingHeaders = Locator.findElements(webDriver,
5554
Locators.floatingHeaderContainer(),
@@ -60,23 +59,22 @@ public static boolean scrollUnderFloatingHeader(WebElement webElement)
6059

6160
if (!floatingHeaders.isEmpty())
6261
{
63-
Rectangle rect = webElement.getRect();
64-
Point elementCenter = new Point(rect.getX() + rect.getWidth()/2, rect.getY() + rect.getHeight()/2);
62+
Rectangle rect = targetElement.getRect();
6563

66-
if (floatingHeaders.stream().anyMatch(el -> pointInRect(elementCenter, el.getRect())))
64+
if (floatingHeaders.stream().anyMatch(headerEl -> rectanglesOverlap(rect, headerEl.getRect())))
6765
{
6866
TestLogger.debug("Scrolled under floating headers:\n" + floatingHeaders.stream().map(WebElement::toString).collect(Collectors.joining("\n")));
69-
((Locatable) webElement).getCoordinates().inViewPort(); // 'inViewPort()' will scroll element into view
67+
((Locatable) targetElement).getCoordinates().inViewPort(); // 'inViewPort()' will scroll element into view
7068
return true;
7169
}
7270
}
7371
return false;
7472
}
7573

76-
private static boolean pointInRect(Point point, Rectangle rect)
74+
private static boolean rectanglesOverlap(Rectangle r1, Rectangle r2)
7775
{
78-
return rect.getX() <= point.getX() && point.getX() <= rect.getX() + rect.getWidth() &&
79-
rect.getY() <= point.getY() && point.getY() <= rect.getY() + rect.getHeight();
76+
return r1.getX() < r2.getX() + r2.getWidth() && r2.getX() < r1.getX() + r1.getWidth()
77+
&& r1.getY() < r2.getY() + r2.getHeight() && r2.getY() < r1.getY() + r1.getHeight();
8078
}
8179

8280
public static Long getWindowScrollY(WebDriver webDriver)

0 commit comments

Comments
 (0)