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");
        }
Example #4
0
        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");
            }
        }
Example #5
0
        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);
            }
        }