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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }