A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/atata-framework/atata-htmlvalidation below:

atata-framework/atata-htmlvalidation: .NET library that adds HTML page validation to Atata using html-validate NPM package

Atata.HtmlValidation is a .NET library that adds HTML page validation to Atata using html-validate NPM package.

The package targets .NET Standard 2.0, which supports .NET 5+, .NET Framework 4.6.1+ and .NET Core/Standard 2.0+.

Install Atata.HtmlValidation NuGet package.

Requires html-validate NPM package, as well as NPM itself, to be installed. By default, when html-validate package is missing, the library automatically tries to install the package, but in case of permissions lack, installation can fail. Therefore, it is recommended when possible to preinstall html-validate package using NPM command:

npm install -g html-validate
Using ValidateHtml extension method

The primary way to execute validations is using ValidateHtml extension method:

public static TPageObject ValidateHtml<TPageObject>(
    this TPageObject pageObject,
    HtmlValidationOptions? options = null,
    bool asWarning = false)
    where TPageObject : PageObject<TPageObject>;

The method validates the HTML of current page. Relies on HtmlValidator class that uses "html-validate" NPM package to execute HTML validation.

Before the execution of validation, the check of installed "html-validate" package version performs. The required package version is defined in HtmlValidatePackageVersion property of options. The required version will be installed if "html-validate" package is not installed or the installed version differs from the required one.

By default, when validation fails, throws an assertion exception with a message containing a list of HTML errors. Produces a warning instead of assertion exception if asWarning argument is set to true.

Go.To<OrdinaryPage>(url: "some/url")
    .ValidateHtml();
Go.To<OrdinaryPage>(url: "some/url")
    .ValidateHtml(asWarning: true);
Validate with custom options
var options = new HtmlValidationOptions
{
    OutputFormatter = HtmlValidateFormatter.Names.Text,
    ResultFileFormatter = HtmlValidateFormatter.Names.Json,
    ConfigPath = "some/config.json"
};

Go.To<OrdinaryPage>(url: "some/url")
    .ValidateHtml(options);
Validate with options based on default
Go.To<OrdinaryPage>(url: "some/url")
    .ValidateHtml(HtmlValidationOptions.Default.CloneWith(x => x.ConfigPath = "another/config.json"));
Using ValidateHtmlAttribute trigger

ValidateHtmlAttribute - the trigger attribute that indicates that the page HTML should be validated on the specified event. By default occurs upon the page object initialization. Invokes ValidateHtml method using HtmlValidationOptions.Default options.

Has public bool AsWarning { get; set; } property that gets or sets a value indicating whether to produce a warning instead of assertion exception on validation failure. The default value is false.

Apply to certain page object
[ValidateHtml]
public class SomePage : Page<_>
{
}
Apply to all page objects
AtataContext.GlobalConfiguration
    .Attributes.Global.Add(new ValidateHtmlAttribute { TargetType = typeof(PageObject<>) });

This approach is a bit low-level one. Can be used without active AtataContext.

HtmlValidator - uses "html-validate" NPM package to execute HTML validation. If required version of "html-validate" package is not installed, installs it.

HtmlValidator validator = new HtmlValidator(
    new HtmlValidationOptions()); // HtmlValidationOptions are optional here.

string html = "<html>...</html>";
// string html = webDriver.PageSource;

HtmlValidationResult result = validator.Validate(html);

if (!result.IsSuccessful)
{
    string resultMessage = result.Output;

    // TODO: Handle validation failure case.
}

Check out html-validate Configuration documentation page on how to create config files.

Mostly, you can create standard .htmlvalidate.json file in the root of a test project with "Copy to Output Directory" property set to "Copy if newer".

HtmlValidationOptions properties Configure default options

It is possible to configure default HtmlValidationOptions upon global initialization method.

Change some default values:

HtmlValidationOptions.Default.OutputFormatter = HtmlValidateFormatter.Names.Codeframe;

Reset default options completely:

HtmlValidationOptions.Default = new HtmlValidationOptions
{
    OutputFormatter = HtmlValidateFormatter.Names.Codeframe,
    SaveResultToFile = false,
    ConfigPath = "some/config.json"
};
HtmlValidationResult members

The results of failed validation using ValidateHtml method can be found in few places.

Additionally original HTML snapshot, which was validated, is saved to Atata Artifacts directory as a file.

An AssertionException is thrown with the message similar to:

Wrong "<app>" page HTML document, which contains errors:
785a0e99-359a-4905-b490-3a62c61fbf37.html
  69:22  error  <th> is missing required "scope" attribute     element-required-attributes
  70:22  error  <th> is missing required "scope" attribute     element-required-attributes
  71:22  error  <th> is missing required "scope" attribute     element-required-attributes
  72:22  error  <th> is missing required "scope" attribute     element-required-attributes
  81:26  error  <button> is missing required "type" attribute  element-required-attributes
  82:26  error  <button> is missing required "type" attribute  element-required-attributes
  83:26  error  <button> is missing required "type" attribute  element-required-attributes

✖ 7 problems (7 errors, 0 warnings)

More information:
  https://html-validate.org/rules/element-required-attributes.html

By default, the result file that is saved to Atata Artifacts directory is generated using "codeframe" formatter, which provides nice detailed report.

error: <th> is missing required "scope" attribute (element-required-attributes) at 785a0e99-359a-4905-b490-3a62c61fbf37.html:69:22:
  67 |             <thead>
  68 |                 <tr>
> 69 |                     <th>Name</th>
     |                      ^^
  70 |                     <th>Price</th>
  71 |                     <th>Amount</th>
  72 |                     <th></th>
Details: https://html-validate.org/rules/element-required-attributes.html


error: <th> is missing required "scope" attribute (element-required-attributes) at 785a0e99-359a-4905-b490-3a62c61fbf37.html:70:22:
  68 |                 <tr>
  69 |                     <th>Name</th>
> 70 |                     <th>Price</th>
     |                      ^^
  71 |                     <th>Amount</th>
  72 |                     <th></th>
  73 |                 </tr>
Details: https://html-validate.org/rules/element-required-attributes.html

...

Additional details of validation execution can be found in Atata log.

...
2024-04-16 19:06:22.708  INFO > Validate: "<app>" page HTML document
2024-04-16 19:06:22.710 TRACE - > Get page source HTML
2024-04-16 19:06:22.731 TRACE - < Get page source HTML (0.021s)
2024-04-16 19:06:22.743 TRACE - HTML saved to file "785a0e99-359a-4905-b490-3a62c61fbf37.html"
2024-04-16 19:06:23.331 TRACE - > Execute html-validate CLI command for "785a0e99-359a-4905-b490-3a62c61fbf37.html" with "stylish" formatter
2024-04-16 19:06:24.259 TRACE - < Execute html-validate CLI command for "785a0e99-359a-4905-b490-3a62c61fbf37.html" with "stylish" formatter (0.927s) >> { IsSuccessful = False }
2024-04-16 19:06:24.261 TRACE - > Execute html-validate CLI command for "785a0e99-359a-4905-b490-3a62c61fbf37.html" with "codeframe" formatter
2024-04-16 19:06:25.116 TRACE - < Execute html-validate CLI command for "785a0e99-359a-4905-b490-3a62c61fbf37.html" with "codeframe" formatter (0.854s) >> { IsSuccessful = False }
2024-04-16 19:06:25.120  INFO - HTML validation report saved to file "785a0e99-359a-4905-b490-3a62c61fbf37.txt"
2024-04-16 19:06:25.480 ERROR - Wrong "<app>" page HTML document, which contains errors:
785a0e99-359a-4905-b490-3a62c61fbf37.html
  69:22  error  <th> is missing required "scope" attribute     element-required-attributes
  70:22  error  <th> is missing required "scope" attribute     element-required-attributes
  71:22  error  <th> is missing required "scope" attribute     element-required-attributes
  72:22  error  <th> is missing required "scope" attribute     element-required-attributes
  81:26  error  <button> is missing required "type" attribute  element-required-attributes
  82:26  error  <button> is missing required "type" attribute  element-required-attributes
  83:26  error  <button> is missing required "type" attribute  element-required-attributes

✖ 7 problems (7 errors, 0 warnings)

More information:
  https://html-validate.org/rules/element-required-attributes.html

2024-04-16 19:06:25.484  INFO < Validate: "<app>" page HTML document (2.775s) >> NUnit.Framework.AssertionException: Wrong "<app>" page HTML document, which contains errors...
...

Check out atata-framework/atata-sample-app-tests repository, which contains HtmlPageValidationTests test class that validates HTML of some pages. It also contains a sample .htmlvalidate.json configuration file.

Any feedback, issues and feature requests are welcome.

If you faced an issue please report it to Atata.HtmlValidation Issues, ask a question on Stack Overflow using atata tag or use another Atata Contact way.

Contact me if you need a help in test automation using Atata Framework, or if you are looking for a quality test automation implementation for your project.

The library is implemented thanks to the sponsorship of Lombiq Technologies.

Check out Contributing Guidelines for details.

Atata Framework follows Semantic Versioning 2.0. Thus backward compatibility is followed and updates within the same major version (e.g. from 1.3 to 1.4) should not require code changes.

Atata is an open source software, licensed under the Apache License 2.0. See LICENSE for details.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4