private void CompareProperties_(Metadata.ImageMatchSettings ims, int index) { Dictionary <string, object> expectedProps = GetExpectationsAtIndex(index).ExpectedProperties; Type imsType = typeof(Metadata.ImageMatchSettings); foreach (KeyValuePair <string, object> kvp in expectedProps) { string propertyNamePath = kvp.Key; string[] properties = propertyNamePath.Split('.'); Type currentType = imsType; object currentObject = ims; foreach (string propName in properties) { PropertyInfo pi = currentType.GetProperty(propName); currentObject = pi.GetValue(currentObject, null); if (currentObject == null) { break; } currentType = currentObject.GetType(); } Assert.AreEqual(kvp.Value, currentObject); } }
public void Teardown() { try { testDataByTestId_.TryGetValue(TestContext.CurrentContext.Test.ID, out SpecificTestContextRequirements testData); TestResults results = testData?.Eyes.Close(); if (results != null) { SessionResults sessionResults = TestUtils.GetSessionResults(GetEyes().ApiKey, results); if (sessionResults != null) { ActualAppOutput[] actualAppOutput = sessionResults.ActualAppOutput; for (int i = 0; i < actualAppOutput.Length; i++) { Metadata.ImageMatchSettings ims = actualAppOutput[i].ImageMatchSettings; CompareRegions_(ims, i); CompareProperties_(ims, i); } } testData.Eyes.Logger.Log("Mismatches: " + results.Mismatches); } if (testData?.Eyes.activeEyes_ is VisualGridEyes visualGridEyes && visualGridEyes.eyesConnector_ is Mock.MockEyesConnector mockEyesConnector) { RenderRequest[] lastRequests = mockEyesConnector.LastRenderRequests; string serializedRequests = JsonUtils.Serialize(lastRequests); if (!TestUtils.RUNS_ON_CI) { string dateString = DateTime.Now.ToString("yyyy_MM_dd__HH_mm"); string directory = Path.Combine(TestUtils.LOGS_PATH, "DotNet", "VGResults", dateString); Directory.CreateDirectory(directory); File.WriteAllText(Path.Combine(directory, testData.TestNameAsFilename + ".json"), serializedRequests); } Assert.AreEqual(testData.ExpectedVGOutput, serializedRequests, "VG Request DOM JSON"); } } catch (Exception ex) { GetEyes()?.Logger?.GetILogHandler()?.Open(); GetEyes()?.Logger?.Log("Exception: " + ex); throw; } finally { Logger logger = GetEyes()?.Logger; if (logger != null) { logger.GetILogHandler()?.Open(); logger.Log("Test finished."); logger.GetILogHandler()?.Close(); Thread.Sleep(1000); } GetEyes()?.Abort(); GetWebDriver()?.Quit(); } }
private void CompareRegions_(Metadata.ImageMatchSettings ims, int index) { if (!CompareExpectedRegion) { return; } Expectations expectations = GetExpectationsAtIndex(index); CompareAccessibilityRegionsList_(ims.Accessibility, expectations.ExpectedAccessibilityRegions, "Accessibility"); CompareFloatingRegionsList_(ims.Floating, expectations.ExpectedFloatingRegions, "Floating"); TestUtils.CompareSimpleRegionsList_(ims.Ignore, expectations.ExpectedIgnoreRegions, "Ignore"); TestUtils.CompareSimpleRegionsList_(ims.Layout, expectations.ExpectedLayoutRegions, "Layout"); TestUtils.CompareSimpleRegionsList_(ims.Content, expectations.ExpectedContentRegions, "Content"); TestUtils.CompareSimpleRegionsList_(ims.Strict, expectations.ExpectedStrictRegions, "Strict"); }
public void TestAccessibility(bool useVisualGrid) { string suffix = useVisualGrid ? "_VG" : ""; ILogHandler logHandler = TestUtils.InitLogHandler(nameof(TestAccessibility) + suffix); EyesRunner runner = useVisualGrid ? (EyesRunner) new VisualGridRunner(10, logHandler) : new ClassicRunner(logHandler); Eyes eyes = new Eyes(runner); eyes.Batch = TestDataProvider.BatchInfo; AccessibilitySettings settings = new AccessibilitySettings(AccessibilityLevel.AA, AccessibilityGuidelinesVersion.WCAG_2_0); Configuration configuration = eyes.GetConfiguration(); configuration.SetAccessibilityValidation(settings); eyes.SetConfiguration(configuration); IWebDriver driver = SeleniumUtils.CreateChromeDriver(); try { driver.Url = "https://applitools.github.io/demo/TestPages/FramesTestPage/"; eyes.Open(driver, "Applitools Eyes SDK", "TestAccessibility_Sanity" + suffix, new Size(700, 460)); eyes.Check("Sanity", Target.Window().Accessibility(By.ClassName("ignore"), AccessibilityRegionType.LargeText)); eyes.CloseAsync(); configuration.SetAccessibilityValidation(null); eyes.SetConfiguration(configuration); eyes.Open(driver, "Applitools Eyes SDK", "TestAccessibility_No_Accessibility" + suffix, new Size(1200, 800)); eyes.CheckWindow("No accessibility"); eyes.CloseAsync(); } finally { driver.Quit(); eyes.AbortAsync(); TestResultsSummary allTestResults = runner.GetAllTestResults(false); Assert.AreEqual(2, allTestResults.Count); TestResults resultSanity = allTestResults[0].TestResults; TestResults resultNoAccessibility = allTestResults[1].TestResults; // Visual grid runner doesn't guarantee the order of the results if (resultNoAccessibility.Name.StartsWith("TestAccessibility_Sanity")) { TestResults temp = resultSanity; resultSanity = resultNoAccessibility; resultNoAccessibility = temp; } // Testing the accessibility status returned in the results SessionAccessibilityStatus accessibilityStatus = resultSanity.AccessibilityStatus; Assert.AreEqual(AccessibilityLevel.AA, accessibilityStatus.Level); Assert.AreEqual(AccessibilityGuidelinesVersion.WCAG_2_0, accessibilityStatus.Version); Assert.IsNull(resultNoAccessibility.AccessibilityStatus); // Testing the accessibility settings sent in the start info SessionResults sessionResults = TestUtils.GetSessionResults(eyes.ApiKey, resultSanity); Metadata.ImageMatchSettings defaultMatchSettings = sessionResults.StartInfo.DefaultMatchSettings; Assert.AreEqual(AccessibilityGuidelinesVersion.WCAG_2_0, defaultMatchSettings.AccessibilitySettings.GuidelinesVersion); Assert.AreEqual(AccessibilityLevel.AA, defaultMatchSettings.AccessibilitySettings.Level); // Testing the accessibility regions sent in the session var matchSettings = sessionResults.ActualAppOutput[0].ImageMatchSettings; var actualRegions = matchSettings.Accessibility; HashSet <AccessibilityRegionByRectangle> expectedRegions = new HashSet <AccessibilityRegionByRectangle>(); expectedRegions.Add(new AccessibilityRegionByRectangle(122, 933, 456, 306, AccessibilityRegionType.LargeText)); expectedRegions.Add(new AccessibilityRegionByRectangle(8, 1277, 690, 206, AccessibilityRegionType.LargeText)); if (useVisualGrid) { expectedRegions.Add(new AccessibilityRegionByRectangle(10, 286, 800, 500, AccessibilityRegionType.LargeText)); } else { expectedRegions.Add(new AccessibilityRegionByRectangle(10, 286, 285, 165, AccessibilityRegionType.LargeText)); } TestSetup.CompareAccessibilityRegionsList_(actualRegions, expectedRegions, "Accessibility"); } }
public void Teardown() { string testId = TestContext.CurrentContext.Test.ID; testDataByTestId_.TryGetValue(testId, out SpecificTestContextRequirements testData); testDataByTestId_.Remove(testId); Eyes eyes = testData?.Eyes; IWebDriver driver = testData?.WebDriver; try { TestResults results = eyes.Close(); if (results != null) { SessionResults sessionResults = TestUtils.GetSessionResults(eyes.ApiKey, results); if (sessionResults != null) { ActualAppOutput[] actualAppOutput = sessionResults.ActualAppOutput; for (int i = 0; i < actualAppOutput.Length; i++) { Metadata.ImageMatchSettings ims = actualAppOutput[i].ImageMatchSettings; CompareRegions_(testData, ims, i); CompareProperties_(testData, ims, i); } } testData.Eyes.Logger.Log(TraceLevel.Notice, testData.TestName, Stage.TestFramework, StageType.Complete, new { results.Mismatches }); } if (testData?.Eyes.activeEyes_ is VisualGridEyes visualGridEyes && visualGridEyes.runner_.ServerConnector is Mock.MockServerConnector mockServerConnector) { List <RenderRequest> requests = new List <RenderRequest>(); foreach (string requestJson in mockServerConnector.RenderRequests) { RenderRequest[] reqs = JsonConvert.DeserializeObject <RenderRequest[]>(requestJson); requests.AddRange(reqs); } string serializedRequests = JsonUtils.CreateSerializer(indent: true).Serialize(requests); if (!TestUtils.RUNS_ON_CI) { string directory = Path.Combine(TestUtils.LOGS_PATH, "DotNet", "VGResults"); File.WriteAllText(Path.Combine(directory, testData.TestNameAsFilename + ".json"), serializedRequests); } string expectedVGOutput = testData.ExpectedVGOutput?.Replace("{{agentId}}", eyes.FullAgentId); Assert.AreEqual(expectedVGOutput, serializedRequests, "VG Request DOM JSON"); } } catch (Exception ex) { eyes?.Logger?.GetILogHandler()?.Open(); CommonUtils.LogExceptionStackTrace(GetEyes()?.Logger, Stage.TestFramework, StageType.Failed, ex, testId); throw; } finally { driver?.Quit(); eyes?.Abort(); eyes?.runner_.GetAllTestResults(false); } }