public EyesWebDriverScreenshot(Logger logger, EyesWebDriver driver, Bitmap image, ScreenshotTypeEnum?screenshotType, Point?frameLocationInScreenshot) : base(image) { ArgumentGuard.NotNull(logger, nameof(logger)); ArgumentGuard.NotNull(driver, nameof(driver)); logger_ = logger; driver_ = driver; logger_.Verbose("enter"); UpdateScreenshotType_(screenshotType, image); IPositionProvider positionProvider; if (frameLocationInScreenshot == null || frameLocationInScreenshot.Value.IsEmpty) { IWebElement frameScrollRoot = driver.Eyes.GetCurrentFrameScrollRootElement(); positionProvider = SeleniumPositionProviderFactory.GetPositionProvider(logger, driver.Eyes.StitchMode, driver, frameScrollRoot); logger_.Debug("position provider: using the current frame scroll root element's position provider: {0}", positionProvider); } else if (driver.Eyes.CurrentFramePositionProvider != null) { positionProvider = driver.Eyes.CurrentFramePositionProvider; logger_.Debug("position provider: using CurrentFramePositionProvider: {0}", positionProvider); } else { positionProvider = driver.Eyes.PositionProvider; logger_.Debug("position provider: using PositionProvider: {0}", positionProvider); } //IPositionProvider positionProvider = driver.Eyes.CurrentFramePositionProvider ?? driver.Eyes.PositionProvider; frameChain_ = driver_.GetFrameChain(); logger_.Verbose("got frame chain. getting frame size..."); Size frameSize = GetFrameSize_(positionProvider); UpdateCurrentScrollPosition_(positionProvider); UpdateFrameLocationInScreenshot_(frameLocationInScreenshot); Size frameContentSize = GetFrameContentSize(); logger.Verbose("Calculating frame window..."); frameWindow_ = new Region(frameLocationInScreenshot_, frameContentSize); Region imageSizeAsRegion = new Region(0, 0, image.Width, image.Height); logger.Verbose("frameWindow_: {0} ; imageSizeAsRegion: {1}", frameWindow_, imageSizeAsRegion); frameWindow_.Intersect(imageSizeAsRegion); logger.Verbose("updated frameWindow_: {0}", frameWindow_); if (frameWindow_.Width <= 0 || frameWindow_.Height <= 0) { throw new EyesException("Got empty frame window for screenshot!"); } logger.Verbose("Done!"); }
public EyesWebDriverTargetLocator(EyesWebDriver driver, Logger logger, ITargetLocator targetLocator) { driver_ = driver; logger_ = logger; targetLocator_ = targetLocator; jsExecutor_ = new SeleniumJavaScriptExecutor(driver_); if (driver.Eyes != null) { scrollPositionProvider_ = SeleniumPositionProviderFactory.GetPositionProvider( logger_, StitchModes.Scroll, jsExecutor_, driver.Eyes.GetCurrentFrameScrollRootElement(), driver.Eyes.userAgent_); } }
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); }
internal static FrameState GetCurrentFrameState(EyesWebDriver driver, IWebElement scrolledElement) { IJavaScriptExecutor jsExecutor = driver; Logger logger = driver.Eyes.Logger; UserAgent userAgent = UserAgent.ParseUserAgentString(driver.GetUserAgent()); IPositionProvider cssPositionProvider = SeleniumPositionProviderFactory.GetPositionProvider(logger, StitchModes.CSS, driver, scrolledElement, userAgent); IPositionProvider scrollPositionProvider = SeleniumPositionProviderFactory.GetPositionProvider(logger, StitchModes.Scroll, driver, scrolledElement, userAgent); string overflow = (string)jsExecutor.ExecuteScript("return arguments[0].style.overflow", scrolledElement); FrameChain frameChain = driver.GetFrameChain().Clone(); FrameState frameState = new FrameState(driver, scrolledElement, cssPositionProvider, scrollPositionProvider, overflow, frameChain); return(frameState); }
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 = SeleniumPositionProviderFactory.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) { image = BasicImageUtils.Crop(image, new Rectangle(scaledLoc, viewportSize)); } } positionProvider?.SetPosition(loc); return(image); }