Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        public UserBindings.RECT GetBrowserBox()
        {
            var browserBox = new UserBindings.RECT();

            UserBindings.GetWindowRect(BrowserHandle, ref browserBox);
            return(browserBox);
        }
Ejemplo n.º 3
0
        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.");
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
                }
            }
        }