diff --git a/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Aquality.Selenium.Template.NUnit.csproj b/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Aquality.Selenium.Template.NUnit.csproj index 90c59c4..0296e24 100644 --- a/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Aquality.Selenium.Template.NUnit.csproj +++ b/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Aquality.Selenium.Template.NUnit.csproj @@ -18,10 +18,10 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Steps/CustomImageComparatorSteps.cs b/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Steps/CustomImageComparatorSteps.cs index caa0c96..b6be103 100644 --- a/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Steps/CustomImageComparatorSteps.cs +++ b/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Steps/CustomImageComparatorSteps.cs @@ -1,40 +1,40 @@ using NUnit.Framework; using Aquality.Selenium.Template.Utilities; -using System.Drawing; using Aquality.Selenium.Template.CustomAttributes; -using System.Diagnostics.CodeAnalysis; +using SkiaSharp; +using System.IO; +using Aquality.Selenium.Core.Visualization; namespace Aquality.Selenium.Template.NUnit.Steps { - [SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "")] public class CustomImageComparatorSteps { private readonly CustomImageComparator customImageComparator; - private readonly Image modelOfImage; + private readonly SKImage modelOfImage; public CustomImageComparatorSteps(float customThresholdValue, string modelImageResourses) { - modelOfImage = Image.FromFile(modelImageResourses); + modelOfImage = new FileInfo(modelImageResourses).ReadImage(); var imageWidth = modelOfImage.Width; var imageHeight = modelOfImage.Height; customImageComparator = new CustomImageComparator(customThresholdValue, imageWidth, imageHeight); } [LogStep(StepType.Step)] - public static Image GetExpectedImageFromResourse(string expectedImageResourse) + public static SKImage GetExpectedImageFromResourse(string expectedImageResourse) { - return Image.FromFile(expectedImageResourse); + return new FileInfo(expectedImageResourse).ReadImage(); } [LogStep(StepType.Assertion)] - public void CheckThatActualAndExpectedImagesAreTheSame(Image expectedImage) + public void CheckThatActualAndExpectedImagesAreTheSame(SKImage expectedImage) { var differenceBetweenImages = customImageComparator.Compare(modelOfImage, expectedImage); Assert.AreEqual(0, differenceBetweenImages, "The images should be the same"); } [LogStep(StepType.Assertion)] - public void CheckThatActualAndExpectedImagesAreNotTheSame(Image expectedImage) + public void CheckThatActualAndExpectedImagesAreNotTheSame(SKImage expectedImage) { var differenceBetweenImages = customImageComparator.Compare(modelOfImage, expectedImage); Assert.AreNotEqual(0, differenceBetweenImages, "The images should not be the same"); diff --git a/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Steps/FooterFormSteps.cs b/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Steps/FooterFormSteps.cs index c10e922..1d3de8d 100644 --- a/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Steps/FooterFormSteps.cs +++ b/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/Steps/FooterFormSteps.cs @@ -8,7 +8,7 @@ namespace Aquality.Selenium.Template.NUnit.Steps public class FooterFormSteps { private readonly FooterForm footerForm = new FooterForm(); - const float ComparisonThreshold = 0.08f; + const float ComparisonThreshold = 0.1f; [LogStep(StepType.Assertion)] public void FooterFormIsPresent() diff --git a/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/runtimeconfig.template.json b/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/runtimeconfig.template.json deleted file mode 100644 index 6906ea9..0000000 --- a/Aquality.Selenium.Template/Aquality.Selenium.Template.NUnit/runtimeconfig.template.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "configProperties": { - "System.Drawing.EnableUnixSupport": true - } -} diff --git a/Aquality.Selenium.Template/Aquality.Selenium.Template.SpecFlow/Aquality.Selenium.Template.SpecFlow.csproj b/Aquality.Selenium.Template/Aquality.Selenium.Template.SpecFlow/Aquality.Selenium.Template.SpecFlow.csproj index 0927df7..06eecc5 100644 --- a/Aquality.Selenium.Template/Aquality.Selenium.Template.SpecFlow/Aquality.Selenium.Template.SpecFlow.csproj +++ b/Aquality.Selenium.Template/Aquality.Selenium.Template.SpecFlow/Aquality.Selenium.Template.SpecFlow.csproj @@ -7,15 +7,15 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/Aquality.Selenium.Template/Aquality.Selenium.Template.SpecFlow/Features/Demo.feature b/Aquality.Selenium.Template/Aquality.Selenium.Template.SpecFlow/Features/Demo.feature index e0aff15..1d77ff6 100644 --- a/Aquality.Selenium.Template/Aquality.Selenium.Template.SpecFlow/Features/Demo.feature +++ b/Aquality.Selenium.Template/Aquality.Selenium.Template.SpecFlow/Features/Demo.feature @@ -6,16 +6,16 @@ Scenario Outline: Empty email validation is working on Contact Us page When I open Contact us page Then Contact us page is opened When I save Contact us page dump - And I fill contact form using following data: - | Name | Value | - | Name | | - | Company | Aquality Automation | - | Phone | +44 208 816 7320 | - | Comment | I'd like to contact you! | - And I accept Privacy and Cookies Policy - And I click Send button + And I fill contact form using following data: + | Name | Value | + | Name | | + | Company | Aquality Automation | + | Phone | +44 208 816 7320 | + | Comment | I'd like to contact you! | + And I accept Privacy and Cookies Policy + And I click Send button Then Notification about empty fields is present - And Contact us page dump is different + And Contact us page dump is different Examples: | Name | diff --git a/Aquality.Selenium.Template/Aquality.Selenium.Template.SpecFlow/runtimeconfig.template.json b/Aquality.Selenium.Template/Aquality.Selenium.Template.SpecFlow/runtimeconfig.template.json deleted file mode 100644 index 6906ea9..0000000 --- a/Aquality.Selenium.Template/Aquality.Selenium.Template.SpecFlow/runtimeconfig.template.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "configProperties": { - "System.Drawing.EnableUnixSupport": true - } -} diff --git a/Aquality.Selenium.Template/Aquality.Selenium.Template/Aquality.Selenium.Template.csproj b/Aquality.Selenium.Template/Aquality.Selenium.Template/Aquality.Selenium.Template.csproj index 487dc19..d89928b 100644 --- a/Aquality.Selenium.Template/Aquality.Selenium.Template/Aquality.Selenium.Template.csproj +++ b/Aquality.Selenium.Template/Aquality.Selenium.Template/Aquality.Selenium.Template.csproj @@ -16,14 +16,14 @@ - + - - + + diff --git a/Aquality.Selenium.Template/Aquality.Selenium.Template/Forms/Pages/ContactUsPage.cs b/Aquality.Selenium.Template/Aquality.Selenium.Template/Forms/Pages/ContactUsPage.cs index f6e2f33..166f53a 100644 --- a/Aquality.Selenium.Template/Aquality.Selenium.Template/Forms/Pages/ContactUsPage.cs +++ b/Aquality.Selenium.Template/Aquality.Selenium.Template/Forms/Pages/ContactUsPage.cs @@ -13,7 +13,7 @@ public class ContactUsPage : BaseAppForm private ITextBox CommentTextBox => ElementFactory.GetTextBox(By.Id("your-message"), "Project description"); private ICheckBox PrivacyCheckBox => ElementFactory.GetCheckBox(By.XPath("//input[@name='privacy']/following-sibling::span[1]"), "Privacy"); private IButton SendButton => ElementFactory.GetButton(By.XPath("//div[contains(@class,'contactsForm__submit')]//button"), "Send a message"); - private ILabel EmailAlertLabel => ElementFactory.GetLabel(By.XPath("//div[contains(@class,'error')]//input[@id='your-email']"), "Email validating message", Core.Elements.ElementState.ExistsInAnyState); + private ILabel EmailAlertLabel => ElementFactory.GetLabel(By.XPath("//div[contains(@class,'error')]//input[@id='your-email']"), "Email validating message", ElementState.ExistsInAnyState); private ILabel TitleLabel => FormElement.FindChildElement(By.XPath("//h2[contains(@class,'blockTitle')]"), "Title"); private ILabel TermsLabel => FormElement.FindChildElement(By.XPath("//label[contains(@class, 'checkbox')]"), "Terms"); private ITextBox ContactUsTextBox(ContactUsTextFields contactUsTextField) => ElementFactory.GetTextBox(By.Id($"{contactUsTextField.GetId()}"), contactUsTextField.ToString()); diff --git a/Aquality.Selenium.Template/Aquality.Selenium.Template/Utilities/CustomImageComparator.cs b/Aquality.Selenium.Template/Aquality.Selenium.Template/Utilities/CustomImageComparator.cs index e164396..c925d76 100644 --- a/Aquality.Selenium.Template/Aquality.Selenium.Template/Utilities/CustomImageComparator.cs +++ b/Aquality.Selenium.Template/Aquality.Selenium.Template/Utilities/CustomImageComparator.cs @@ -1,6 +1,6 @@ using Aquality.Selenium.Core.Configurations; using Aquality.Selenium.Core.Visualization; -using System.Drawing; +using SkiaSharp; namespace Aquality.Selenium.Template.Utilities { @@ -14,7 +14,7 @@ public CustomImageComparator(float defaultThreshold, int comparisonWidth, int co imageComparator = new ImageComparator(visualizationConfiguration); } - public float Compare(Image firstImage, Image secondImage, float? threshold = null) + public float Compare(SKImage firstImage, SKImage secondImage, float? threshold = null) { return imageComparator.PercentageDifference(firstImage, secondImage, threshold); } diff --git a/Aquality.Selenium.Template/Aquality.Selenium.Template/Utilities/ScreenshotProvider.cs b/Aquality.Selenium.Template/Aquality.Selenium.Template/Utilities/ScreenshotProvider.cs index f193e14..20d3887 100644 --- a/Aquality.Selenium.Template/Aquality.Selenium.Template/Utilities/ScreenshotProvider.cs +++ b/Aquality.Selenium.Template/Aquality.Selenium.Template/Utilities/ScreenshotProvider.cs @@ -1,13 +1,11 @@ using Aquality.Selenium.Browsers; +using Aquality.Selenium.Core.Visualization; +using SkiaSharp; using System; -using System.Drawing; -using System.Drawing.Imaging; using System.IO; -using System.Diagnostics.CodeAnalysis; namespace Aquality.Selenium.Template.Utilities { - [SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "")] public class ScreenshotProvider { public string TakeScreenshot() @@ -17,16 +15,14 @@ public string TakeScreenshot() EnsureDirectoryExists(directory); var screenshotName = $"{GetType().Name}_{DateTime.Now:yyyyMMdd_HHmmss}_{Guid.NewGuid().ToString("n").Substring(0, 5)}.png"; var path = Path.Combine(directory, screenshotName); - image.Save(path, ImageFormat.Png); + image.Save(path, SKEncodedImageFormat.Png); return path; } - private static Image GetImage() + private static SKImage GetImage() { - using (var stream = new MemoryStream(AqualityServices.Browser.GetScreenshot())) - { - return Image.FromStream(stream); - } + using var stream = new MemoryStream(AqualityServices.Browser.GetScreenshot()); + return SKImage.FromEncodedData(stream); } private static void EnsureDirectoryExists(string directory)