77import org .labkey .test .util .DataRegionTable ;
88import org .labkey .test .util .TestLogger ;
99import org .openqa .selenium .JavascriptExecutor ;
10+ import org .openqa .selenium .Point ;
11+ import org .openqa .selenium .Rectangle ;
1012import org .openqa .selenium .WebDriver ;
1113import org .openqa .selenium .WebElement ;
1214import org .openqa .selenium .interactions .Locatable ;
@@ -53,17 +55,15 @@ public static boolean scrollUnderFloatingHeader(WebElement webElement)
5355 Locators .floatingHeaderContainer (),
5456 Locators .appFloatingHeader (),
5557 Locators .domainDesignerFloatingHeader (),
56- DataRegionTable .Locators .floatingHeader ().notHidden ());
58+ DataRegionTable .Locators .floatingHeader ().notHidden (),
59+ Locators .floatingGridHeader );
5760
58- int headerHeight = 0 ;
59- for (WebElement floatingHeader : floatingHeaders )
61+ if (!floatingHeaders .isEmpty ())
6062 {
61- headerHeight += floatingHeader .getSize ().getHeight ();
62- }
63- if (headerHeight > 0 )
64- {
65- int elYInViewPort = webElement .getLocation ().getY () - getWindowScrollY (webDriver ).intValue ();
66- if (headerHeight > elYInViewPort )
63+ Rectangle rect = webElement .getRect ();
64+ Point elementCenter = new Point (rect .getX () + rect .getWidth ()/2 , rect .getY () + rect .getHeight ()/2 );
65+
66+ if (floatingHeaders .stream ().anyMatch (el -> pointInRect (elementCenter , el .getRect ())))
6767 {
6868 TestLogger .debug ("Scrolled under floating headers:\n " + floatingHeaders .stream ().map (WebElement ::toString ).collect (Collectors .joining ("\n " )));
6969 ((Locatable ) webElement ).getCoordinates ().inViewPort (); // 'inViewPort()' will scroll element into view
@@ -73,6 +73,12 @@ public static boolean scrollUnderFloatingHeader(WebElement webElement)
7373 return false ;
7474 }
7575
76+ private static boolean pointInRect (Point point , Rectangle rect )
77+ {
78+ return rect .getX () <= point .getX () && point .getX () <= rect .getX () + rect .getWidth () &&
79+ rect .getY () <= point .getY () && point .getY () <= rect .getY () + rect .getHeight ();
80+ }
81+
7682 public static Long getWindowScrollY (WebDriver webDriver )
7783 {
7884 Number N = (Number ) executeScript (webDriver , "return window.scrollY;" );
0 commit comments