public MatchResult MatchWindow(Rectangle?region, IList <Trigger> userInputs, string tag, bool shouldRunOnceOnRetryTimeout, bool replaceLast, ICheckSettingsInternal checkSettingsInternal, string source, string domUrl = null) { ImageMatchSettings imageMatchSettings = CreateImageMatchSettings(checkSettingsInternal, eyes_); int retryTimeout = checkSettingsInternal.GetTimeout(); if (retryTimeout < 0) { retryTimeout = defaultRetryTimeout_; } Logger_.Verbose("retryTimeout: {0} ; replaceLast: {1}", retryTimeout, replaceLast); EyesScreenshot screenshot = TakeScreenshot_( region, userInputs, tag, shouldRunOnceOnRetryTimeout, replaceLast, checkSettingsInternal, imageMatchSettings, retryTimeout, source); if (replaceLast) { return(matchResult_); } UpdateLastScreenshot_(screenshot); return(matchResult_); }
private void CollectRegions_(ImageMatchSettings imageMatchSettings, ICheckSettingsInternal checkSettingsInternal) { imageMatchSettings.Ignore = ConvertSimpleRegions(checkSettingsInternal.GetIgnoreRegions(), imageMatchSettings.Ignore); imageMatchSettings.Content = ConvertSimpleRegions(checkSettingsInternal.GetContentRegions(), imageMatchSettings.Content); imageMatchSettings.Layout = ConvertSimpleRegions(checkSettingsInternal.GetLayoutRegions(), imageMatchSettings.Layout); imageMatchSettings.Strict = ConvertSimpleRegions(checkSettingsInternal.GetStrictRegions(), imageMatchSettings.Strict); imageMatchSettings.Floating = ConvertFloatingRegions(checkSettingsInternal.GetFloatingRegions(), imageMatchSettings.Floating); imageMatchSettings.Accessibility = ConvertAccessibilityRegions(checkSettingsInternal.GetAccessibilityRegions(), imageMatchSettings.Accessibility); }
private static void CollectSimpleRegions_(ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings, EyesBase eyes, EyesScreenshot screenshot) { imageMatchSettings.Ignore = CollectSimpleRegions_(eyes, screenshot, checkSettingsInternal.GetIgnoreRegions(), "Ignore"); imageMatchSettings.Strict = CollectSimpleRegions_(eyes, screenshot, checkSettingsInternal.GetStrictRegions(), "Strict"); imageMatchSettings.Layout = CollectSimpleRegions_(eyes, screenshot, checkSettingsInternal.GetLayoutRegions(), "Layout"); imageMatchSettings.Content = CollectSimpleRegions_(eyes, screenshot, checkSettingsInternal.GetContentRegions(), "Content"); }
public static void CollectRegions(EyesBase eyes, EyesScreenshot screenshot, ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings) { eyes.Logger.Verbose("enter"); CollectSimpleRegions_(checkSettingsInternal, imageMatchSettings, eyes, screenshot); CollectFloatingRegions_(checkSettingsInternal, imageMatchSettings, eyes, screenshot); CollectAccessibilityRegions_(checkSettingsInternal, imageMatchSettings, eyes, screenshot); LogRegions_(eyes.Logger, imageMatchSettings); eyes.Logger.Verbose("exit"); }
public static ImageMatchSettings CreateImageMatchSettings(ICheckSettingsInternal checkSettingsInternal, EyesBase eyes, EyesScreenshot screenshot) { ImageMatchSettings imageMatchSettings = CreateImageMatchSettings(checkSettingsInternal, eyes); if (imageMatchSettings != null) { CollectSimpleRegions_(checkSettingsInternal, imageMatchSettings, eyes, screenshot); CollectFloatingRegions_(checkSettingsInternal, imageMatchSettings, eyes, screenshot); CollectAccessibilityRegions_(checkSettingsInternal, imageMatchSettings, eyes, screenshot); } eyes.Logger.Log(TraceLevel.Info, eyes.TestId, Stage.Check, new { regions = imageMatchSettings }); return(imageMatchSettings); }
private static void CollectFloatingRegions_(ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings, EyesBase eyes, EyesScreenshot screenshot) { eyes.Logger.Verbose("enter"); List <FloatingMatchSettings> floatingRegions = new List <FloatingMatchSettings>(); foreach (IGetFloatingRegion regionProvider in checkSettingsInternal.GetFloatingRegions()) { floatingRegions.AddRange(regionProvider.GetRegions(eyes, screenshot)); } imageMatchSettings.Floating = floatingRegions.ToArray(); eyes.Logger.Verbose("exit"); }
private AppOutput GetAppOutput_(Rectangle?region, ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings) { try { var appOutput = getAppOutput_(region, checkSettingsInternal, imageMatchSettings); return(appOutput); } catch (Exception ex) { CommonUtils.LogExceptionStackTrace(logger_, Stage.Check, ex, eyes_.TestId); throw; } }
private static void CollectAccessibilityRegions_(ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings, EyesBase eyes, EyesScreenshot screenshot) { eyes.Logger.Verbose("enter"); List <AccessibilityRegionByRectangle> accessibilityRegions = new List <AccessibilityRegionByRectangle>(); foreach (IGetAccessibilityRegion regionProvider in checkSettingsInternal.GetAccessibilityRegions()) { accessibilityRegions.AddRange(regionProvider.GetRegions(eyes, screenshot)); } imageMatchSettings.Accessibility = accessibilityRegions.ToArray(); eyes.Logger.Verbose("exit"); }
private static void CollectAccessibilityRegions_(ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings, EyesBase eyes, EyesScreenshot screenshot) { List <AccessibilityRegionByRectangle> accessibilityRegions = new List <AccessibilityRegionByRectangle>(); foreach (IGetAccessibilityRegion regionProvider in checkSettingsInternal.GetAccessibilityRegions()) { accessibilityRegions.AddRange(regionProvider.GetRegions(eyes, screenshot)); } imageMatchSettings.Accessibility = accessibilityRegions.ToArray(); eyes.Logger.Log(TraceLevel.Debug, eyes.TestId, Stage.Check, new { type = "accessibility", regions = accessibilityRegions }); }
private static void CollectFloatingRegions_(ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings, EyesBase eyes, EyesScreenshot screenshot) { List <FloatingMatchSettings> floatingRegions = new List <FloatingMatchSettings>(); foreach (IGetFloatingRegion regionProvider in checkSettingsInternal.GetFloatingRegions()) { floatingRegions.AddRange(regionProvider.GetRegions(eyes, screenshot)); } imageMatchSettings.Floating = floatingRegions.ToArray(); eyes.Logger.Log(TraceLevel.Debug, eyes.TestId, Stage.Check, new { type = "floating", regions = floatingRegions }); }
public static ImageMatchSettings CreateImageMatchSettings(ICheckSettingsInternal checkSettingsInternal, EyesBase eyes, EyesScreenshot screenshot) { eyes.Logger.Verbose("enter"); ImageMatchSettings imageMatchSettings = CreateImageMatchSettings(checkSettingsInternal, eyes); if (imageMatchSettings != null) { CollectSimpleRegions_(checkSettingsInternal, imageMatchSettings, eyes, screenshot); CollectFloatingRegions_(checkSettingsInternal, imageMatchSettings, eyes, screenshot); CollectAccessibilityRegions_(checkSettingsInternal, imageMatchSettings, eyes, screenshot); LogRegions_(eyes.Logger, imageMatchSettings); } eyes.Logger.Verbose("exit"); return(imageMatchSettings); }
public MatchResult PerformMatch(AppOutputWithScreenshot appOutput, string tag, bool ignoreMismatch, ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings, IList <IRegion> regions, IList <VisualGridSelector[]> regionSelectors, EyesBase eyes, string source, string renderId = null) { EyesScreenshot screenshot = appOutput.Screenshot; string agentSetupStr = eyes.GetAgentSetupString(); CollectRegions_(imageMatchSettings, regions, regionSelectors); CollectRegions_(imageMatchSettings, checkSettingsInternal); return(PerformMatch_(new Trigger[0], appOutput, tag, ignoreMismatch, imageMatchSettings, agentSetupStr, source, renderId)); }
public static ImageMatchSettings CreateImageMatchSettings(ICheckSettingsInternal checkSettingsInternal, EyesBase eyes) { ImageMatchSettings imageMatchSettings = null; if (checkSettingsInternal != null) { imageMatchSettings = eyes.DefaultMatchSettings.Clone(); imageMatchSettings.MatchLevel = checkSettingsInternal.GetMatchLevel() ?? eyes.MatchLevel; imageMatchSettings.IgnoreCaret = checkSettingsInternal.GetIgnoreCaret() ?? eyes.IgnoreCaret; imageMatchSettings.UseDom = checkSettingsInternal.GetUseDom() ?? eyes.UseDom; imageMatchSettings.EnablePatterns = checkSettingsInternal.GetEnablePatterns() ?? eyes.EnablePatterns; imageMatchSettings.IgnoreDisplacements = checkSettingsInternal.GetIgnoreDisplacements() ?? eyes.Config.IgnoreDisplacements; imageMatchSettings.AccessibilitySettings = eyes.Config.AccessibilityValidation; } return(imageMatchSettings); }
private AppOutputWithScreenshot GetAppOutput_(Rectangle?region, ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings) { var sw = Stopwatch.StartNew(); try { var appOutput = getAppOutput_(region, checkSettingsInternal, imageMatchSettings); Logger_.Verbose("completed in {0}ms", sw.ElapsedMilliseconds); return(appOutput); } catch (Exception ex) { Logger_.Log("failed in {0}ms - {1}", sw.ElapsedMilliseconds, ex); throw; } }
SizeMode ICheckSettingsInternal.GetSizeMode() { ICheckSettingsInternal checkSettingsInternal = this; bool stitchContent = checkSettingsInternal.GetStitchContent() ?? false; Rectangle?region = checkSettingsInternal.GetTargetRegion(); if (region == null && GetTargetSelector() == null) { return(stitchContent ? SizeMode.FullPage : SizeMode.Viewport); } else if (region != null) { return(SizeMode.Region); } else /* if (selector != null) */ { return(SizeMode.Selector); } }
private List <RenderRequest> BuildRenderRequests_(FrameData currentFrame, IDictionary <string, RGridResource> resourceMapping) { Uri url = currentFrame.Url; RGridDom dom = new RGridDom(currentFrame.Cdt, resourceMapping, url, logger_, "buildRenderRequests"); //Create RG requests List <RenderRequest> allRequestsForRG = new List <RenderRequest>(); ICheckSettingsInternal csInternal = (ICheckSettingsInternal)settings_; foreach (VisualGridTask task in taskList_) { RenderBrowserInfo browserInfo = task.BrowserInfo; RenderInfo renderInfo = new RenderInfo(browserInfo.Width, browserInfo.Height, csInternal.GetSizeMode(), csInternal.GetTargetSelector(), csInternal.GetTargetRegion(), browserInfo.EmulationInfo, browserInfo.IosDeviceInfo); List <VisualGridSelector> regionSelectors = new List <VisualGridSelector>(); if (regionSelectors_ != null) { foreach (VisualGridSelector[] vgs in regionSelectors_) { regionSelectors.AddRange(vgs); } } RenderRequest request = new RenderRequest(renderingInfo_.ResultsUrl, url, renderingInfo_.StitchingServiceUrl, dom, resourceMapping, renderInfo, browserInfo.Platform, browserInfo.BrowserType, csInternal.GetScriptHooks(), regionSelectors.ToArray(), csInternal.GetSendDom() ?? false, task, csInternal.GetVisualGridOptions()); allRequestsForRG.Add(request); } return(allRequestsForRG); }
private EyesScreenshot TryTakingScreenshot_(Rectangle?region, IList <Trigger> userInputs, string tag, bool replaceLast, ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings, string source) { Logger_.Verbose("enter"); AppOutputWithScreenshot appOutputWithScreenshot = GetAppOutput_(region, checkSettingsInternal, imageMatchSettings); EyesScreenshot screenshot = appOutputWithScreenshot.Screenshot; AppOutput appOutput = appOutputWithScreenshot.AppOutput; string currentScreenshotHash = screenshot == null ? appOutput.ScreenshotUrl : CommonUtils.GetSha256Hash(appOutput.ScreenshotBytes); Logger_.Verbose("current screenshot hash: {0}", currentScreenshotHash); if (lastScreenshotHash_ == currentScreenshotHash) { Logger_.Log("second screenshot is the same as the first, no point in uploading to server."); } else { matchResult_ = PerformMatch(userInputs, appOutputWithScreenshot, tag, replaceLast || (lastScreenshotHash_ != null), imageMatchSettings, eyes_, source); lastScreenshotHash_ = currentScreenshotHash; } Logger_.Verbose("exit"); return(screenshot); }
private EyesScreenshot RetryTakingScreenshot_(Rectangle?region, IList <Trigger> userInputs, string tag, bool replaceLast, ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings, int retryTimeout, string source) { Logger_.Verbose("enter"); // Retry matching and ignore mismatches while the retry timeout does not expires. var sw2 = Stopwatch.StartNew(); EyesScreenshot screenshot = null; while (sw2.ElapsedMilliseconds < retryTimeout) { Thread.Sleep(MatchInterval_); screenshot = TryTakingScreenshot_(region, userInputs, tag, replaceLast, checkSettingsInternal, imageMatchSettings, source); if (matchResult_.AsExpected) { break; } } if (!matchResult_.AsExpected) { // Try one last time... screenshot = TryTakingScreenshot_(region, userInputs, tag, replaceLast, checkSettingsInternal, imageMatchSettings, source); } Logger_.Verbose("exit"); return(screenshot); }
private EyesScreenshot TakeScreenshot_(Rectangle?region, IList <Trigger> userInputs, string tag, bool shouldRunOnceOnRetryTimeout, bool replacLast, ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings, int retryTimeout, string source) { EyesScreenshot screenshot; Stopwatch sw = Stopwatch.StartNew(); lastScreenshotHash_ = null; if (shouldRunOnceOnRetryTimeout || retryTimeout == 0) { if (retryTimeout > 0) { Thread.Sleep(retryTimeout); } screenshot = TryTakingScreenshot_(region, userInputs, tag, replacLast, checkSettingsInternal, imageMatchSettings, source); } else { screenshot = RetryTakingScreenshot_(region, userInputs, tag, replacLast, checkSettingsInternal, imageMatchSettings, retryTimeout, source); } Logger_.Verbose("Completed in {0}", sw.Elapsed); return(screenshot); }
private EyesScreenshot TryTakingScreenshot_(Rectangle?region, IList <Trigger> userInputs, string tag, bool replaceLast, ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings, string source) { AppOutput appOutput = GetAppOutput_(region, checkSettingsInternal, imageMatchSettings); string currentScreenshotHash = appOutput.ScreenshotUrl ?? CommonUtils.GetSha256Hash(appOutput.ScreenshotBytes); logger_.Log(TraceLevel.Info, Stage.Check, StageType.CaptureScreenshot, new { currentScreenshotHash, lastScreenshotHash_ }); if (lastScreenshotHash_ != currentScreenshotHash) { MatchWindowData data = eyes_.PrepareForMatch(checkSettingsInternal, userInputs, appOutput, tag, replaceLast || (lastScreenshotHash_ != null), imageMatchSettings, null, source); matchResult_ = eyes_.PerformMatch(data); lastScreenshotHash_ = currentScreenshotHash; } return((EyesScreenshot)appOutput.Screenshot); }
protected override EyesScreenshot GetScreenshot(Rectangle?targetRegion, ICheckSettingsInternal checkSettingsInternal, ImageMatchSettings imageMatchSettings) { throw new NotImplementedException(); }
protected override EyesScreenshot GetScreenshot(Rectangle?targetRegion, ICheckSettingsInternal checkSettingsInternal) { return(new TestEyesScreenshot()); }
public void TestCheckSettingsClone() { ICheckSettings checkSettings = Target.Window(); checkSettings = checkSettings.Accessibility(new Rectangle(20, 30, 40, 50), AccessibilityRegionType.GraphicalObject); checkSettings = checkSettings.BeforeRenderScreenshotHook("Test Hook"); checkSettings = checkSettings.Content(new Rectangle(10, 20, 30, 40)); checkSettings = checkSettings.EnablePatterns(true); checkSettings = checkSettings.Floating(new Rectangle(30, 40, 50, 60), 1, 2, 3, 4); checkSettings = checkSettings.Fully(true); checkSettings = checkSettings.Ignore(new Rectangle(40, 50, 60, 70)); checkSettings = checkSettings.IgnoreCaret(true); checkSettings = checkSettings.IgnoreDisplacements(true); checkSettings = checkSettings.Layout(new Rectangle(50, 60, 70, 80)); checkSettings = checkSettings.MatchLevel(MatchLevel.Exact); checkSettings = checkSettings.SendDom(true); checkSettings = checkSettings.Strict(new Rectangle(60, 70, 80, 90)); checkSettings = checkSettings.Timeout(TimeSpan.FromMinutes(4)); checkSettings = checkSettings.UseDom(true); checkSettings = checkSettings.WithName("Test Name"); ICheckSettingsInternal clonedCheckSettings = (ICheckSettingsInternal)checkSettings.Clone(); Assert.AreEqual(null, clonedCheckSettings.GetTargetRegion(), "target region"); IGetAccessibilityRegion[] getAccessibilityRegions = clonedCheckSettings.GetAccessibilityRegions(); Assert.AreEqual(1, getAccessibilityRegions.Length, "number of accessibility region getters"); IList <AccessibilityRegionByRectangle> accessibilityRegions = getAccessibilityRegions[0].GetRegions(null, null); Assert.AreEqual(1, accessibilityRegions.Count, "number of accessibility regions"); AccessibilityRegionByRectangle expectedAccessibilityRegion = new AccessibilityRegionByRectangle(new Rectangle(20, 30, 40, 50), AccessibilityRegionType.GraphicalObject); Assert.AreEqual(expectedAccessibilityRegion.Region, accessibilityRegions[0].Region, "accessibility region coordinates"); Assert.AreEqual(expectedAccessibilityRegion.Type, accessibilityRegions[0].Type, "accessibility region type"); Assert.AreEqual("Test Hook", clonedCheckSettings.GetScriptHooks()["beforeCaptureScreenshot"]); AssertRegion(clonedCheckSettings.GetContentRegions(), new Rectangle(10, 20, 30, 40), "Content"); Assert.AreEqual(true, clonedCheckSettings.GetEnablePatterns()); IGetFloatingRegion[] getFloatingRegions = clonedCheckSettings.GetFloatingRegions(); Assert.AreEqual(1, getFloatingRegions.Length, "number of Floating region getters"); IList <FloatingMatchSettings> FloatingRegions = getFloatingRegions[0].GetRegions(null, null); Assert.AreEqual(1, FloatingRegions.Count, "number of Floating regions"); FloatingMatchSettings expectedFloatingRegion = new FloatingMatchSettings(30, 40, 50, 60, 1, 2, 3, 4); Assert.AreEqual(expectedFloatingRegion, FloatingRegions[0], "Floating region"); Assert.AreEqual(true, clonedCheckSettings.GetStitchContent(), "fully (stitch content)"); AssertRegion(clonedCheckSettings.GetIgnoreRegions(), new Rectangle(40, 50, 60, 70), "Ignore"); Assert.AreEqual(true, clonedCheckSettings.GetIgnoreCaret(), "ignore caret"); Assert.AreEqual(true, clonedCheckSettings.GetIgnoreDisplacements(), "ignore displacements"); AssertRegion(clonedCheckSettings.GetLayoutRegions(), new Rectangle(50, 60, 70, 80), "Layout"); Assert.AreEqual(MatchLevel.Exact, clonedCheckSettings.GetMatchLevel(), "match level"); Assert.AreEqual(true, clonedCheckSettings.GetSendDom(), "send dom"); AssertRegion(clonedCheckSettings.GetStrictRegions(), new Rectangle(60, 70, 80, 90), "Strict"); Assert.AreEqual((int)TimeSpan.FromMinutes(4).TotalMilliseconds, clonedCheckSettings.GetTimeout(), "timeout"); Assert.AreEqual(true, clonedCheckSettings.GetUseDom(), "use dom"); Assert.AreEqual("Test Name", clonedCheckSettings.GetName(), "name"); }
private void PollRenderingStatus_(Dictionary <RunningRender, RenderRequest> runningRenders) { logger_.Verbose("enter"); List <string> ids = GetRenderIds_(runningRenders.Keys); Stopwatch stopwatch = Stopwatch.StartNew(); do { List <RenderStatusResults> renderStatusResultsList = null; try { renderStatusResultsList = connector_.RenderStatusById(ids.ToArray()); } catch (Exception e) { logger_.Log("Error (3): " + e); continue; } if (renderStatusResultsList == null || renderStatusResultsList.Count == 0) { logger_.Verbose("No reason to sample. (ids.Count: {0})", ids.Count); Thread.Sleep(500); continue; } if (renderStatusResultsList[0] == null) { logger_.Verbose("First element is null. Total number of elements: {0}. Continuing.", renderStatusResultsList.Count); Thread.Sleep(500); continue; } SampleRenderingStatus_(runningRenders, ids, renderStatusResultsList); if (ids.Count > 0) { Thread.Sleep(1500); } logger_.Verbose("ids.Count: {0} ; runtime: {1}", ids.Count, stopwatch.Elapsed); } while (ids.Count > 0 && stopwatch.Elapsed < pollTimeout_); foreach (string id in ids) { foreach (KeyValuePair <RunningRender, RenderRequest> kvp in runningRenders) { RunningRender renderedRender = kvp.Key; RenderRequest renderRequest = kvp.Value; if (renderedRender.RenderId.Equals(id, StringComparison.OrdinalIgnoreCase)) { VisualGridTask task = runningRenders[renderedRender].Task; logger_.Verbose("removing failed render id: {0}", id); task.SetRenderError(id, "too long rendering(rendering exceeded 150 sec)", renderRequest); break; } } } ICheckSettingsInternal rcInternal = (ICheckSettingsInternal)settings_; logger_.Verbose("marking task as complete: {0}", rcInternal.GetName()); IsTaskComplete = true; NotifySuccessAllListeners_(); logger_.Verbose("exit"); }