Ошибки и предупреждения – Проверка веб-доступности на C#
Aspose.HTML for .NET предоставляет пространство имен Aspose.Html.Accessibility, которое предназначено для всех манипуляций и проверок, связанных с веб-доступностью. В этой статье будут рассмотрены классы и интерфейсы, которые помогают собирать информацию об ошибках и предупреждениях при проверке доступности веб-сайта на соответствие требованиям WCAG. Мы уделим особое внимание критериям сбоев и методам, которые сообщают об ошибках, и рассмотрим пример C# получения ошибок веб-доступности после проверки HTML-документа.
Как использовать класс AccessibilityValidator для проверки веб-доступности вы можете узнать из статьи Accessibility Validator – Проверка доступности веб-сайта на C#.
Обнаружение ошибок помогает выявить препятствия, которые могут помешать людям с ограниченными возможностями эффективно использовать веб-контент и взаимодействовать с ним. Ошибки и предупреждения указывают, что необходимо предпринять для улучшения доступности Интернета. Они служат для разработчиков и дизайнеров дорожной картой для внесения необходимых изменений.
IError
IError – это общедоступный интерфейс, содержащий информацию об ошибке проверки. Это означает ошибочную проверку, т. е. правило не было пройдено – и его результат не соответствует Accessibility.
Property | Description |
---|---|
ErrorMessage | Returns a string message of the error or warning. |
Target | Returns an HTML or CSS element where the error was found. The returned object is of type Target. |
ErrorTypeName | Description of the presentation of the error object. It has two options “Error” or “Warning”. |
ErrorType | Returns error type numeric value. |
Success | Result of this object. |
Объект IError имеет такие значения:
* ErrorType = 1 and Success = false – это означает, что ошибка критическая и результат проверки не выполнен.
* ErrorType = 2 and Success = true – это означает, что ошибка не критична, а носит информационный характер, отображает подсказки по возможному улучшению.
Тип ошибки определяется типом оборудования; если техника достаточна, то ErrorType = 1, и это Error; в противном случае ErrorType = 2 – предупреждение.
Target
Target – это общедоступный класс, который содержит элемент HTML или CSS документа, в котором была обнаружена ошибка.
Property | Description |
---|---|
Item | Returns Object of html or css element. |
TargetType | Returns the type of the contained object. Object type of TargetTypes. |
TargetTypes
Перечисление TargetTypes типов элементов из HTML-документа, содержащего ошибку:
Value | Description |
---|---|
HTMLElement | The element containing the HTMLElement from document. |
CSSStyleRule | The element containing the CSSStyleRule from document. |
CSSStyleSheet | The element containing the CSSStyleSheet from document. |
Давайте посмотрим на код C# для перебора результатов проверки веб-доступности, уделив особое внимание критериям сбоя и деталям методов, сообщающих об ошибках. Пример получения сведений об ошибках и элементов HTML-документа:
- Используйте класс
RuleValidationResult и перебирайте объекты
RuleResult
, содержащиеся вValidationResult.Details
. Они представляют собой разные критерии доступности. - Распечатайте код и описание критерия и укажите, был ли он успешным или нет. Для этого используйте свойства Code и Description интерфейса IRule.
- Используйте свойство Success, чтобы проверить критерии.
- Используйте объекты
ITechniqueResult –
result
, содержащийся вruleResult.Errors
. Объекты ITechniqueResult представляют результаты отдельных правил для критерия, сообщившего об ошибках. - Распечатайте информацию о методе, включая код метода, статус успеха и описание.
- Используйте свойство IError, чтобы получить объект ошибки из результата. Результат представляет конкретную проблему доступности, а объект ошибки содержит информацию об этой проблеме.
- Используйте свойство Target для получения целевого объекта, связанного с ошибкой. Целевой объект обычно представляет собой конкретный элемент HTML, правило CSS или другой контент, который вызвал ошибку доступности.
- Распечатайте информацию об ошибке. Он включает тип ошибки (
error.ErrorTypeName
) и сообщение об ошибке (error.ErrorMessage
). - Используйте свойство TargetType класса Target, чтобы проверить тип целевого объекта. В зависимости от типа целевого объекта конкретная информация извлекается и выводится на консоль.
1// Initialize a webAccessibility container
2var webAccessibility = new WebAccessibility();
3
4// Create an accessibillity validator with static instance for all rules from repository that match the builder settings
5var validator = webAccessibility.CreateValidator(ValidationBuilder.All);
6
7string documentPath = Path.Combine(DataDir, "input.html");
8
9// Initialize an object of the HTMLDocument class
10using (var document = new HTMLDocument(documentPath))
11{
12 // Check the document
13 ValidationResult validationResult = validator.Validate(document);
14
15 foreach (RuleValidationResult ruleResult in validationResult.Details)
16 {
17 // list only unsuccessful rule
18 if (!ruleResult.Success)
19 {
20 // print the code and description of the rule
21 Console.WriteLine("{0}:{1} = {2}", ruleResult.Rule.Code, ruleResult.Rule.Description, ruleResult.Success);
22 // print the results of methods with errors
23 foreach (ITechniqueResult ruleDetail in ruleResult.Errors)
24 {
25 // print the code and description of the method
26 StringBuilder str = new StringBuilder(string.Format("\n{0}: {1} - {2}",
27 ruleDetail.Rule.Code, ruleDetail.Success,
28 ruleDetail.Rule.Description));
29 // get an error object
30 var error = ruleDetail.Error;
31 // get a target object
32 var target = error.Target;
33 // get error type and message
34 str.AppendFormat("\n\n\t{0} : {1}", error.ErrorTypeName, error.ErrorMessage);
35 if (target != null)
36 {
37 // Checking the type of the contained object for casting and working with it
38 if (target.TargetType == TargetTypes.CSSStyleRule)
39 {
40 var cssRule = (ICSSStyleRule)target.Item;
41 str.AppendFormat("\n\n\t{0}", cssRule.CSSText);
42 }
43 if (ruleDetail.Error.Target.TargetType == TargetTypes.CSSStyleSheet)
44 str.AppendFormat("\n\n\t{0}", ((ICSSStyleSheet)target.Item).Title);
45
46 if (ruleDetail.Error.Target.TargetType == TargetTypes.HTMLElement)
47 str.AppendFormat("\n\n\t{0}", ((HTMLElement)target.Item).OuterHTML);
48 }
49 Console.WriteLine(str.ToString());
50 }
51 }
52 }
53}