public Point PutElementOnScreen(IWebElement element) { ((IJavaScriptExecutor)WebDriver).ExecuteScript("arguments[0].scrollIntoView(true);", element); //((IJavaScriptExecutor)WebDriver).ExecuteScript("scrollBy(0,-200);"); var location = GetLocation(element); var size = element.Size; var browserBox = new UserBindings.RECT(); UserBindings.GetWindowRect(BrowserHandle, ref browserBox); ScrollToCenterOfScreen(location, browserBox); location = GetLocation(element); var browserBarHeight = ContentOffsetY(); var bb = ContentOffsetX(); location.Y += (int)Math.Abs(browserBarHeight); location.Y += Math.Min(size.Height / 2, 8); location.X += Math.Min(size.Width / 2, 8); return(location); }
public UserBindings.RECT GetBrowserBox() { var browserBox = new UserBindings.RECT(); UserBindings.GetWindowRect(BrowserHandle, ref browserBox); return(browserBox); }
public override object DoRun() { var searchStrategy = new LocationHeuristictSearchStrategy(this.Selenium); var lookupResult = searchStrategy.DirectLookup(TagNames, SubjectName, Locale, Direction, Order, false); if (Interpreter?.IsAnalysis == true) { Console.Out.WriteColoredLine(ConsoleColor.Magenta, $"Main Result: \n\t{lookupResult.MainResult}\nAll results:\n\t{string.Join("\n\t", lookupResult.AllValidResults)}"); } var chromeHandle = Selenium.BrowserHandle; var browserBox = new UserBindings.RECT(); UserBindings.GetWindowRect(chromeHandle, ref browserBox); var e = lookupResult.AllValidResults.ElementAt(Order); Selenium.PutElementOnScreen(e.WebElement); var refreshedPosition = e.WebElement.AsBufferedElement().Rectangle; var centerX = refreshedPosition.X + refreshedPosition.Width / 2; var centerY = refreshedPosition.Y + refreshedPosition.Height / 2; var p = new Point(centerX, centerY); Selenium.ConvertFromPageToWindow(ref p); if (p.X < 0 || p.X > browserBox.Right || p.Y < 0 || p.Y > browserBox.Bottom) { throw new NotFoundException("Element not found"); } else { if (Interpreter?.IsDebugMode == true) { BrowserOverlay .HighlightElements((Order + 1).ToString(), (Expect.ToString().ToLower().Equals(true.ToString().ToLower()) ? Color.GreenYellow : Color.Red), lookupResult.MainResult) .ShowFor(750, "Highlighted element will be Clicked"); } return(lookupResult.AllValidResults.ElementAt(Order).WebElement.Selected); } throw new NotFoundException("Element not found"); throw new NotImplementedException($"Checking visibility of nth ({Order}) elements is not implemented."); }
private bool IsInsideBoundingBox(IBufferedElement e, UserBindings.RECT browserBox) { Selenium.PutElementOnScreen(e.WebElement); var refreshedPosition = e.WebElement.AsBufferedElement().Rectangle; var centerX = refreshedPosition.X + refreshedPosition.Width / 2; var centerY = refreshedPosition.Y + refreshedPosition.Height / 2; var p = new Point(centerX, centerY); Selenium.ConvertFromPageToWindow(ref p); var isOutsideBoundingBox = p.X <0 || p.X> browserBox.Right || p.Y <0 || p.Y> browserBox.Bottom; return(!isOutsideBoundingBox); }
private void ScrollToCenterOfScreen(Point location, UserBindings.RECT browserBox) { var diff = location.Y - browserBox.Top; if (diff < 200) { var scrollBy = 200 - diff; ((IJavaScriptExecutor)WebDriver).ExecuteScript($"scrollBy(0,-{scrollBy});"); location.Y += scrollBy; } diff = browserBox.Bottom - location.Y; if (diff < 200) { var scrollBy = -200 + diff; ((IJavaScriptExecutor)WebDriver).ExecuteScript($"scrollBy(0,{scrollBy});"); location.Y += scrollBy; } }
private IEnumerable <IBufferedElement> OnScreen(IEnumerable <IBufferedElement> bufferedElements) { var chromeHandle = _seleniumAdapter.BrowserHandle; var browserBox = new UserBindings.RECT(); UserBindings.GetWindowRect(chromeHandle, ref browserBox); foreach (var e in bufferedElements) { _seleniumAdapter.PutElementOnScreen(e.WebElement); var refreshedPosition = e.WebElement.AsBufferedElement().Rectangle; var centerX = refreshedPosition.X + refreshedPosition.Width / 2; var centerY = refreshedPosition.Y + refreshedPosition.Height / 2; var p = new Point(centerX, centerY); _seleniumAdapter.ConvertFromPageToWindow(ref p); if (p.X >= 0 && p.X <= browserBox.Right && p.Y >= 0 && p.Y <= browserBox.Bottom) { yield return(e); } } }