Example #1
0
        private string GetDom_()
        {
            FrameChain originalFC = null;

            originalFC = webDriver_.GetFrameChain().Clone();
            logger_.Verbose("saving current frame chain - size: {0} ; frame: {1}", originalFC.Count, originalFC.Peek());
            string dom = "";

            try
            {
                dom = GetFrameDom_();
            }
            catch (Exception e)
            {
                logger_.Log("Error: " + e);
            }

            logger_.Verbose("switching back to original frame");
            ((EyesWebDriverTargetLocator)webDriver_.SwitchTo()).Frames(originalFC);
            FrameChain currentFC = webDriver_.GetFrameChain();

            logger_.Verbose("switched to frame chain - size: {0} ; frame: {1}", currentFC.Count, currentFC.Peek());

            WaitForCssDownloadToFinish_();
            logger_.Verbose("finished waiting for CSS files to download");
            string inlaidString = StringUtils.EfficientStringReplace(cssStartToken_, cssEndToken_, dom, cssData_);

            logger_.Verbose("inlaid string");
            return(inlaidString);
        }
Example #2
0
        private string GetDom_(string[] testIds)
        {
            FrameChain originalFC = webDriver_.GetFrameChain().Clone();

            logger_.Verbose("saving current frame chain - size: {0} ; frame: {1}", originalFC.Count, originalFC.Peek());
            string dom = "";

            try
            {
                dom = GetFrameDom_(testIds);
            }
            catch (Exception e)
            {
                CommonUtils.LogExceptionStackTrace(logger_, Stage.Check, StageType.DomScript, e, testIds);
            }

            logger_.Verbose("switching back to original frame");
            ((EyesWebDriverTargetLocator)webDriver_.SwitchTo()).Frames(originalFC);
            FrameChain currentFC = webDriver_.GetFrameChain();

            logger_.Verbose("switched to frame chain - size: {0} ; frame: {1}", currentFC.Count, currentFC.Peek());

            WaitForCssDownloadToFinish_(testIds);
            logger_.Log(TraceLevel.Info, testIds, Stage.Check, StageType.DomScript,
                        new { message = "finished waiting for CSS files to download" });
            string inlaidString = StringUtils.EfficientStringReplace(cssStartToken_, cssEndToken_, dom, cssData_);

            logger_.Log(TraceLevel.Info, testIds, Stage.Check, StageType.DomScript, new { inlaidStringLength = inlaidString.Length });
            return(inlaidString);
        }
Example #3
0
        public Region CompensateRegionPosition(Region region, double pixelRatio)
        {
            if (pixelRatio == 1.0)
            {
                return(region);
            }

            EyesWebDriver eyesWebDriver = eyes.GetDriver();
            FrameChain    frameChain    = eyesWebDriver.GetFrameChain();

            if (frameChain.Count > 0)
            {
                return(region);
            }

            System.Drawing.Rectangle rect = region.ToRectangle();
            rect.Offset(0, -(int)Math.Ceiling(pixelRatio / 2));

            if (rect.Width <= 0 || rect.Height <= 0)
            {
                return(Region.Empty);
            }

            Region compensatedRegion = new Region(rect);

            logger.Verbose($"compensating for firefox: {region} ==> {compensatedRegion}");

            return(compensatedRegion);
        }
Example #4
0
        internal string GetFullWindowDom(params string[] testIds)
        {
            FrameChain originalFC = webDriver_.GetFrameChain().Clone();

            webDriver_.ExecuteScript("document.documentElement.setAttribute('data-applitools-active-frame', true)");
            webDriver_.SwitchTo().DefaultContent();
            Stopwatch stopwatch = Stopwatch.StartNew();
            string    domJson   = GetDom_(testIds);

            logger_.Verbose(nameof(GetDom_) + " took {0} ms", stopwatch.Elapsed.TotalMilliseconds);
            ((EyesWebDriverTargetLocator)webDriver_.SwitchTo()).Frames(originalFC);
            return(domJson);
        }
Example #5
0
        public override Bitmap GetImage()
        {
            Bitmap image = base.GetImage();

            logger_.Verbose("Bitmap Size: {0}x{1}", image.Width, image.Height);

            eyes_.DebugScreenshotProvider.Save(image, "SAFARI");

            if (eyes_.IsCutProviderExplicitlySet)
            {
                return(image);
            }

            double scaleRatio = eyes_.DevicePixelRatio;

            Size originalViewportSize = GetViewportSize();

            Size viewportSize = new Size(
                (int)Math.Ceiling(originalViewportSize.Width * scaleRatio),
                (int)Math.Ceiling(originalViewportSize.Height * scaleRatio));

            logger_.Verbose("logical viewport size: " + originalViewportSize);

            if (userAgent_.OS.Equals(OSNames.IOS))
            {
                image = CropIOSImage(image, originalViewportSize, logger_);
            }
            else if (!eyes_.ForceFullPageScreenshot)
            {
                Point      loc;
                FrameChain currentFrameChain = eyes_.GetDriver().GetFrameChain();

                if (currentFrameChain.Count == 0)
                {
                    IWebElement       scrollRootElement = eyes_.GetCurrentFrameScrollRootElement();
                    IPositionProvider positionProvider  = SeleniumPositionProviderFactory.GetPositionProvider(logger_, StitchModes.Scroll, jsExecutor_, scrollRootElement, userAgent_);
                    loc = positionProvider.GetCurrentPosition();
                }
                else
                {
                    loc = currentFrameChain.GetDefaultContentScrollPosition();
                }

                loc = new Point((int)Math.Ceiling(loc.X * scaleRatio), (int)Math.Ceiling(loc.Y * scaleRatio));

                image = BasicImageUtils.Crop(image, new Rectangle(loc, viewportSize));
            }
            eyes_.DebugScreenshotProvider.Save(image, "SAFARI_CROPPED");

            return(image);
        }
Example #6
0
        private Dictionary <string, string> RecurseFrames_(List <string> missingFramesList)
        {
            logger_.Verbose("enter");
            Dictionary <string, string> framesData = new Dictionary <string, string>();
            EyesWebDriverTargetLocator  switchTo   = (EyesWebDriverTargetLocator)webDriver_.SwitchTo();

            FrameChain fc = webDriver_.GetFrameChain().Clone();

            foreach (string missingFrameLine in missingFramesList)
            {
                try
                {
                    logger_.Verbose("handling frame xpath: {0}", missingFrameLine);

                    string originLocation = (string)webDriver_.ExecuteScript("return document.location.href");

                    string[] missingFrameXpaths = missingFrameLine.Split(',');
                    foreach (string missingFrameXpath in missingFrameXpaths)
                    {
                        IWebElement frame = webDriver_.FindElement(By.XPath(missingFrameXpath));
                        switchTo.Frame(frame);
                    }
                    string locationAfterSwitch = (string)webDriver_.ExecuteScript("return document.location.href");
                    if (locationAfterSwitch.Equals(originLocation, StringComparison.OrdinalIgnoreCase))
                    {
                        logger_.Log("WARNING! Failed switching into frame. HREF: {0}", locationAfterSwitch);
                        framesData.Add(missingFrameLine, string.Empty);
                        continue;
                    }
                    string result = GetFrameDom_();
                    framesData.Add(missingFrameLine, result);
                }
                catch (Exception e)
                {
                    logger_.Log("Error: " + e);
                    framesData.Add(missingFrameLine, string.Empty);
                }
                finally
                {
                    switchTo.Frames(fc);
                }
            }

            logger_.Verbose("exit");
            return(framesData);
        }
Example #7
0
        private Dictionary <string, string> RecurseFrames_(List <string> missingFramesList, string[] testIds)
        {
            Dictionary <string, string> framesData = new Dictionary <string, string>();
            EyesWebDriverTargetLocator  switchTo   = (EyesWebDriverTargetLocator)webDriver_.SwitchTo();

            FrameChain fc = webDriver_.GetFrameChain().Clone();

            foreach (string missingFrameLine in missingFramesList)
            {
                try
                {
                    string originLocation = (string)webDriver_.ExecuteScript("return document.location.href");

                    string[] missingFrameXpaths = missingFrameLine.Split(',');
                    foreach (string missingFrameXpath in missingFrameXpaths)
                    {
                        IWebElement frame = webDriver_.FindElement(By.XPath(missingFrameXpath));
                        switchTo.Frame(frame);
                    }
                    string locationAfterSwitch = (string)webDriver_.ExecuteScript("return document.location.href");
                    if (locationAfterSwitch.Equals(originLocation, StringComparison.OrdinalIgnoreCase))
                    {
                        logger_.Log(TraceLevel.Warn, testIds, Stage.Check, StageType.DomScript,
                                    new { message = "Failed switching into frame.", locationAfterSwitch });
                        framesData.Add(missingFrameLine, string.Empty);
                        continue;
                    }
                    string result = GetFrameDom_(testIds);
                    framesData.Add(missingFrameLine, result);
                }
                catch (Exception e)
                {
                    CommonUtils.LogExceptionStackTrace(logger_, Stage.Check, e, testIds);
                    framesData.Add(missingFrameLine, string.Empty);
                }
                finally
                {
                    switchTo.Frames(fc);
                }
            }

            return(framesData);
        }
        public override Bitmap GetImage()
        {
            logger_.Verbose("Getting current position...");
            Point  loc;
            double scaleRatio = eyes_.DevicePixelRatio;

            FrameChain        currentFrameChain = eyes_.GetDriver().GetFrameChain();
            IPositionProvider positionProvider  = null;

            if (currentFrameChain.Count == 0)
            {
                IWebElement scrollRootElement = eyes_.GetCurrentFrameScrollRootElement();
                positionProvider = eyes_.GetPositionProvider(logger_, StitchModes.Scroll,
                                                             jsExecutor_, scrollRootElement, userAgent_);
                loc = positionProvider.GetCurrentPosition();
            }
            else
            {
                loc = currentFrameChain.GetDefaultContentScrollPosition();
            }
            Point scaledLoc = new Point((int)Math.Round(loc.X * scaleRatio), (int)Math.Round(loc.Y * scaleRatio));

            Bitmap        image  = base.GetImage();
            EyesWebDriver driver = eyes_.GetDriver();
            RectangleSize originalViewportSize = EyesSeleniumUtils.GetViewportSize(logger_, driver);
            RectangleSize viewportSize         = originalViewportSize.Scale(scaleRatio);

            if (image.Height > viewportSize.Height || image.Width > viewportSize.Width)
            {
                //Damn IE driver returns full page screenshot even when not asked to!
                logger_.Verbose("seems IE returned full page screenshot rather than only the viewport.");
                eyes_.DebugScreenshotProvider.Save(image, "IE");
                if (!eyes_.IsCutProviderExplicitlySet)
                {
                    Bitmap croppedImage = BasicImageUtils.Crop(image, new Rectangle(scaledLoc, viewportSize));
                    image.Dispose();
                    image = croppedImage;
                }
            }

            positionProvider?.SetPosition(loc);
            return(image);
        }
Example #9
0
        public override Bitmap GetImage()
        {
            logger_.Verbose("Getting screenshot...");

            EyesWebDriver eyesWebDriver = eyes_.GetDriver();
            FrameChain    frameChain    = eyesWebDriver.GetFrameChain().Clone();

            logger_.Verbose("temporarilly switching to default content.");
            eyesWebDriver.SwitchTo().DefaultContent();

            Bitmap image = BasicImageUtils.CreateBitmap(tsInstance_.GetScreenshot().AsByteArray);

            eyes_.DebugScreenshotProvider.Save(image, "FIREFOX");

            logger_.Verbose("switching back to original frame.");
            ((EyesWebDriverTargetLocator)eyesWebDriver.SwitchTo()).Frames(frameChain);

            return(image);
        }
Example #10
0
        public override Bitmap GetImage()
        {
            Bitmap image = base.GetImage();

            if (eyes_.CachedSessionDetails != null &&
                eyes_.CachedSessionDetails.TryGetValue("deviceOrientation", out object orientation))
            {
                if ("landscape".Equals(orientation as string, StringComparison.OrdinalIgnoreCase) && image.Width < image.Height)
                {
                    logger_.Verbose("rotating image...");
                    image.RotateFlip(RotateFlipType.Rotate270FlipNone);
                }
            }

            logger_.Verbose("Bitmap Size: {0}x{1}", image.Width, image.Height);
            eyes_.DebugScreenshotProvider.Save(image, "SAFARI");

            if (eyes_.IsCutProviderExplicitlySet)
            {
                return(image);
            }

            double scaleRatio = eyes_.DevicePixelRatio;

            Size originalViewportSize = GetViewportSize();

            Size viewportSize = new Size(
                (int)Math.Ceiling(originalViewportSize.Width * scaleRatio),
                (int)Math.Ceiling(originalViewportSize.Height * scaleRatio));

            logger_.Verbose("logical viewport size: " + originalViewportSize);

            Bitmap croppedImage = null;

            if (userAgent_.IsiOS ||
                "ios".Equals(eyes_.PlatformName, StringComparison.OrdinalIgnoreCase) ||
                (eyes_.CachedSessionDetails.TryGetValue("PlatformName", out object platformName) &&
                 "ios".Equals(platformName as string, StringComparison.OrdinalIgnoreCase)))
            {
                croppedImage = CropIOSImage(image, originalViewportSize, logger_);
            }
            else if (!eyes_.ForceFullPageScreenshot)
            {
                Point      loc;
                FrameChain currentFrameChain = eyes_.GetDriver().GetFrameChain();

                if (currentFrameChain.Count == 0)
                {
                    IWebElement       scrollRootElement = eyes_.GetCurrentFrameScrollRootElement();
                    IPositionProvider positionProvider  = eyes_.GetPositionProvider(
                        logger_, StitchModes.Scroll, jsExecutor_, scrollRootElement,
                        userAgent_);
                    loc = positionProvider.GetCurrentPosition();
                }
                else
                {
                    loc = currentFrameChain.GetDefaultContentScrollPosition();
                }

                loc = new Point((int)Math.Ceiling(loc.X * scaleRatio), (int)Math.Ceiling(loc.Y * scaleRatio));

                croppedImage = BasicImageUtils.Crop(image, new Rectangle(loc, viewportSize));
            }
            if (croppedImage != null && !ReferenceEquals(croppedImage, image))
            {
                image.Dispose();
                image = croppedImage;
            }
            eyes_.DebugScreenshotProvider.Save(image, "SAFARI_CROPPED");

            return(image);
        }