网络无障碍检查 – 错误和警告
如何检查网站的无障碍性
检查网站的可访问性是指确保包括残障人士在内的所有人都能使用您的网站或应用程序。这就需要根据 WCAG等指南来测试您的内容,这些指南概述了如何使数字体验更具包容性。使用 Aspose.HTML for Java,您可以通过扫描 HTML 和 CSS 以发现可访问性问题来自动完成这一过程,既可以对照 WCAG 全套标准,也可以专注于特定标准。
在本文中,您将学习如何使用 com.aspose.html.accessibility 和 com.aspose.html.accessibility.results 包中的类和方法来评估网站的可访问性是否符合 WCAG 标准。我们将探索各种类和接口,它们有助于在检查网站的可访问性时收集错误和警告信息。我们将特别关注报告错误的失败标准和方法,并通过一个 Java 示例来演示如何在验证 HTML 文档后检索网络可访问性错误。
让我们来看看与网页可访问性验证相关的代码片段。下面的代码使用所有 WCAG 验证规则检查远程 HTML 页面的可访问性,并打印未成功满足的任何规则的详细信息:
- 使用 WebAccessibility() 构造函数创建一个负责网络可访问性验证的 WebAccessibility 类实例。
- 调用 createValidator() 方法创建验证器对象。
- 使用
HTMLDocument(
Url) 构造函数加载 HTML 页面。 - 使用
validate(
document) 方法检查网页的可访问性。结果存储在validationResult变量中。 - 检查验证是否成功。对于每个可访问性问题,打印有关规则代码、规则描述以及验证成功或失败的信息。
1// Check website for WCAG compliance in Java
2
3// Initialize webAccessibility container
4WebAccessibility webAccessibility = new WebAccessibility();
5
6// Create an accessibility validator with static instance
7// for all rules from repository that match the builder settings
8AccessibilityValidator validator = webAccessibility.createValidator(ValidationBuilder.getAll());
9
10// Initialize an HTMLDocument object
11final HTMLDocument document = new HTMLDocument("https://products.aspose.com/html/net/generators/video/");
12ValidationResult validationResult = validator.validate(document);
13
14// Checking for success
15if (!validationResult.getSuccess()) {
16 // Get a list of Details
17 for (RuleValidationResult detail : validationResult.getDetails()) {
18 System.out.println(String.format("%s: %s = %s",
19 detail.getRule().getCode(),
20 detail.getRule().getDescription(),
21 detail.getSuccess()
22 ));
23 }
24}错误和警告
检测错误有助于识别可能妨碍残障人士有效使用网络内容并与之互动的障碍。错误和警告可为改善网络无障碍提供指导。它们是开发人员和设计人员进行必要修改的路线图。
IError
IError 是一个包含验证错误信息的公共接口。这意味着错误的检查,即规则未通过,其结果与无障碍访问不匹配。
IError 接口描述了在可访问性检查过程中遇到的验证问题的细节。它提供了有关错误的关键信息,包括通过 getErrorMessage() 获得的人可读信息、通过 getSuccess() 获得的结果状态,以及错误类型的数值(getErrorType())和描述性名称(getErrorTypeName()),如 Error 或 Warning。此外,getTarget() 还会返回出现问题的特定 HTML 或 CSS 元素,以便准确识别和纠正可访问性问题。该界面对于有效解释和报告辅助功能检查结果至关重要。
IError 对象就有这样的含义:
* ErrorType = 1 and Success = false – this means that the error is critical, and the result of the check is not performed.
* ErrorType = 2 and Success = true – this means that the error is not critical but has an informational character and displays hints for possible improvement.
错误类型由技术类型决定:
- 如果某项技术未能满足所需的成功标准,而该标准是满足该技术的必要条件,则结果将被标记为严重失败,产生
ErrorType=1和Success=false两项结果,属于 Error。 - 如果某项技术并非严格要求,或者如果该问题更多是最佳实践或改进建议,而非硬性违反规则,则会标记为
ErrorType=2和Success=true,并且是Warning。
Target
Target 类表示在验证过程中检测到可访问性错误或警告的特定 HTML 或 CSS 元素。它提供两个关键属性:Item"(返回导致问题的实际对象(如 HTML 标记或 CSS 规则))和 “TargetType”(确定问题源是 HTML 元素还是 CSS 组件)。
TargetTypes
TargetTypes 枚举定义了 HTML 文档中可能出现辅助功能错误或警告的对象类型。它有助于对问题源进行分类,使问题更容易识别和解决。该枚举包含三个值:
| Name | Value | Description |
|---|---|---|
| HTMLElement | 0 | The element containing the HTMLElement from a document: standard HTML elements such as <img> or <button>. |
| CSSStyleRule | 1 | The element containing the CSSStyleRule from a document: specific CSS rules in stylesheets. |
| CSSStyleSheet | 2 | The element containing the CSSStyleSheet from a document: entire CSS stylesheets. |
该枚举与 Target 类配合使用,可准确指出导致验证结果的元素类型。
生成完整的无障碍报告
让我们来看看遍历网络可访问性检查结果的 Java 代码,尤其要注意失败标准和报告错误的方法的细节。获取 HTML 文档错误细节和元素的示例:
- 使用
RuleValidationResult 类并遍历
validationResult.getDetails()中包含的ruleResult对象。这些对象代表不同的可访问性标准。 - 打印标准的代码和说明以及是否成功。为此,请使用 IRule 接口的 Code 和 Description 属性。
- 使用 getSuccess() 方法检查标准。
- 使用包含在
ruleResult.getErrors()中的 ITechniqueResult 对象 –ruleDetail。ITechniqueResult 对象代表报告错误的标准的各个规则结果。 - 打印方法的相关信息,包括方法代码、成功状态和说明。
- 使用
IError 属性从
ruleDetail中获取error对象。ruleDetail代表一个特定的可访问性问题,而error对象则包含有关该问题的信息。 - 使用
getTarget() 检索与错误相关的
target对象。target “对象通常代表引发可访问性错误的特定 HTML 元素、CSS 规则或其他内容。 - 打印错误信息。其中包括错误类型
error.getErrorTypeName()和错误信息error.getErrorMessage()。 - 使用目标类的 getTargetType() 方法检查目标对象的类型。根据目标对象的类型,将提取特定信息并打印到控制台。
1// Check HTML for WCAG compliance and output failed rule codes and error messages
2
3// Initialize a webAccessibility container
4WebAccessibility webAccessibility = new WebAccessibility();
5
6// Create an accessibility validator with static instance
7// for all rules from repository that match the builder settings
8AccessibilityValidator validator = webAccessibility.createValidator(ValidationBuilder.getAll());
9
10String documentPath = "input.html";
11
12// Initialize an object of the HTMLDocument class
13final HTMLDocument document = new HTMLDocument(documentPath);
14ValidationResult validationResult = validator.validate(document);
15
16for (RuleValidationResult ruleResult : validationResult.getDetails()) {
17 // list only unsuccessful rule
18 if (!ruleResult.getSuccess()) {
19 // print the code and description of the rule
20 System.out.println(String.format("%s: %s = %s",
21 ruleResult.getRule().getCode(),
22 ruleResult.getRule().getDescription(),
23 ruleResult.getSuccess()
24 ));
25
26 // print the results of methods with errors
27 for (ITechniqueResult ruleDetail : ruleResult.getErrors()) {
28 // print the code and description of the method
29 StringBuilder str = new StringBuilder(String.format("\n{0}: {1} - {2}",
30 ruleDetail.getRule().getCode(),
31 ruleDetail.getSuccess(),
32 ruleDetail.getRule().getDescription()
33 ));
34 // get an error object
35 IError error = ruleDetail.getError();
36 // get a target object
37 Target target = error.getTarget();
38 // get error type and message
39 str.append(String.format("\n\n\t%s : %s",
40 error.getErrorTypeName(),
41 error.getErrorMessage()
42 ));
43
44 if (target != null) {
45 // Checking the type of the contained object for casting and working with it
46 if (target.getTargetType() == TargetTypes.CSSStyleRule) {
47 ICSSStyleRule cssRule = (ICSSStyleRule) target.getItem();
48 str.append(String.format("\n\n\t%s",
49 cssRule.getCSSText()
50 ));
51 }
52 if (ruleDetail.getError().getTarget().getTargetType() == TargetTypes.CSSStyleSheet) {
53 str.append(String.format("\n\n\t%s",
54 ((ICSSStyleSheet) target.getItem()).getTitle()
55 ));
56 }
57 if (ruleDetail.getError().getTarget().getTargetType() == TargetTypes.HTMLElement) {
58 str.append(String.format("\n\n\t%s",
59 ((HTMLElement) target.getItem()).getOuterHTML()
60 ));
61 }
62 }
63 System.out.println(str);
64 }
65 }
66}对于每个失败的标准,代码都会列出规则描述、失败方法、错误信息,并突出显示发现问题的 HTML 或 CSS 元素。这种方法非常适合生成完整、准确的可访问性报告,包括错误上下文和开发人员的技术诊断。
