p1ho/accessibility-checker

此软件包已废弃且不再维护。未建议替代软件包。

从内容管理系统提取的原始HTML的可用性测试套件

0.2.2 2020-03-25 01:35 UTC

This package is auto-updated.

Last update: 2021-07-25 04:40:13 UTC


README

Build Status Coverage Status

目录

简介

这是一个评估从内容管理系统提取的HTML字符串的Web可用性测试套件。这并不是一个详尽的可用性检查,而是旨在揭示严重可用性问题,以及提高对可用性的一般认识。

目前,这个项目正在开发中,目标是分析来自Drupal节点的正文文本。然而,这些程序中使用的算法可能对开发更通用的解决方案也很有用。

类别

  1. 颜色对比:由于低对比度颜色可能引起可读性问题,此程序将遍历HTML中的所有元素,比较其文本颜色与背景颜色,以查看其对比度是否符合WCAG 2.0标准。目前,它只会分析内联样式,并会忽略由于复杂性而包含的 'opacity' 属性。

  2. 标题结构:为了确保屏幕阅读器或其他设备能够像开发者预期的那样正确解析页面上的信息,我们必须确保它们也能正确解析。由于标题结构(从<h1><h6>)在构建页面层次结构中起着关键作用,因此此程序将检查是否存在跳过的或放置不正确的标题。此外,由于建议每个页面只存在一个<h1>,默认情况下将开启对多个<h1>的检查,但可以关闭。

  3. 图像可用性:我们必须假设使用屏幕阅读器的人无法看到页面上的任何内容(只能听到),这包括图片。因此,对于内容中不可或缺的图片,也必须在它的 'alt' 属性中包含描述。此程序将对没有alt属性的<img>标记引发错误,并将对具有空alt属性的<img>标记引发警告(因为图片可能仅仅是为了美观而存在)。

  4. 链接可访问性:这检查两个事项:链接是否无效/未优化,以及链接文本是否清晰且描述性。特别是,链接文本对于屏幕阅读器也很重要,因为通常有一个选项可以列出特定页面上的所有链接;如果所有链接都读取为 点击此处更多信息,那么用户在没有实际访问它的情况下,将无法知道该链接是否有用。(在之前的版本中使用了 HEAD 请求;然而,结果显示并非所有服务器都能正确实现 HEAD 请求,或者根本不允许使用,因此现在使用常规 GET 请求,以牺牲数据大小来换取一致性)

安装

此包可通过 Composer 获取,并可以通过输入以下命令进行安装:

$ composer require p1ho/accessibility-checker

使用方法

配置

检查器名称 参数 参数描述
颜色对比度检查器 (可选)mode,(可选)bg,(可选)color WCAG 2.0 符合性:"AA" 或 "AAA",默认为 "AA"。 背景颜色:任何有效的 CSS 值,默认为 "白色"。 颜色:任何有效的 CSS 值,默认为 "黑色"。
标题结构检查器 (可选)heading_shift,(可选)strict_mode,(可选)allow_multiple_h1 heading_shift:因为 CMS 通常有一个用于页面标题的单独字段,内容部分实际上并不从 <h1> 开始,heading_shift 考虑了这一点(接受 0-6 的数字)。 strict_mode:如果 strict_mode 设置为 false,则可以嵌套不同级别的标题,如 <h1><h2>;如果设置为 true,则 <h2> 必须嵌套得更深。 allow_multiple_h1:默认为 false,如果设置为 true,则拥有多个 <h1> 不会产生任何错误。
图像可访问性检查器
链接可访问性检查器 (可选)redirect_whitelist redirect_whitelist:一些网页总是会重定向,可以将这些页面添加到白名单中,以跳过重定向检查。

示例

<?php

require_once __DIR__ . '/vendor/autoload.php';

use P1ho\AccessibilityChecker\ColorContrast;
use P1ho\AccessibilityChecker\HeadingStructure;
use P1ho\AccessibilityChecker\ImageAccessibility;
use P1ho\AccessibilityChecker\LinkAccessibility;

// initialize accessibility checkers
$color_contrast_checker     = new ColorContrast\Checker();
$heading_structure_checker  = new HeadingStructure\Checker();
$img_accessibility_checker  = new ImageAccessibility\Checker();
$link_accessibility_checker = new LinkAccessibility\Checker();

$html = "<p>Enter your html here</p>";
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);

$page_url = "url-where-page-is-taken-from"; // this is to check relative links.

$color_contrast_result      = $color_contrast_checker->evaluate($dom);
$heading_structure_result   = $heading_structure_checker->evaluate($dom);
$image_accessibility_result = $img_accessibility_checker->evaluate($dom);
$link_accessibility_result  = $link_accessibility_checker->evaluate($dom, $page_url);

报告结构

通常,报告方案将采用以下结构

{
  "passed": true | false,
  "errors": [
    // list of objects with error details
  ],
  // for image accessibility checker
  "warnings": [
    // list of objects with warning details
  ]
}

颜色对比度错误

无效样式属性

类型 之一 ["无效颜色", "无效大小", "无效重量"]
属性 之一 ["背景颜色", "颜色", "字体大小", "字体粗细"]
标签 标签名称,例如 h1p
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 "修复无效的 <insert-property>。"

糟糕的颜色对比度

类型 "低对比度"
属性 "AA""AAA"(见 WCAG 2.0 符合性级别
标签 标签名称,例如 h1p
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
text_is_large 是否文本加粗级别或大小使其成为 大号 字体
contrast_ratio 计算出的对比度四舍五入到小数点后两位(例如 1.23
建议 此元素的对比度必须至少为<插入值>

标题结构错误

不允许的标题

类型 “不允许的标题”
标签 标题标签之一(例如 h1
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 “检查并仅使用允许的标题(<插入允许的标题列表>)。”

标题嵌套在标题中

类型 “标题嵌套在标题中”
标签 标题标签之一(例如 h1
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 “不要将标题嵌套在另一个标题中。”

跳过的标题

类型 “跳过的标题”
标签 标题标签之一(例如 h1
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 如果跳过 h3,则会显示 "在放置此标题之前应期望 <h3>。"

标题层级太浅

类型 “标题层级太浅”
标签 标题标签之一(例如 h1
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 “尝试将此标题嵌套得更深。”

标题层级太深

类型 “标题层级太深”
标签 标题标签之一(例如 h1
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 “尝试将此标题嵌套得更浅。”

标题位置错误

类型 “标题位置错误”
标签 标题标签之一(例如 h1
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 “尝试将此标题嵌套得更浅。”

无效标题

类型 “无效标题”
标签 标题标签之一(例如 h1
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 “仅使用有效的标题(<h1>至<h6>)。

图像可访问性错误

无替代文本(错误)

类型 “无替代文本”
src src 属性内的值
HTML 标签的原始 HTML
建议 “在 img 中添加 alt 属性并添加描述。”

文件名替代文本(错误)

类型 “文件名替代文本”
src src 属性内的值
HTML 标签的原始 HTML
建议 “不要使用图像文件名作为 alt 属性,描述图像。”

空替代文本(警告)

类型 “空替代文本”
src src 属性内的值
HTML 标签的原始 HTML
建议 “如果此图像对内容至关重要,请添加描述。”

链接可访问性错误

重定向

类型 “重定向”
href href 属性内的值
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 “使用最终的重定向链接。”

死链接

类型 “死链接”
href href 属性内的值
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 “找到替代的可行链接。”

域名冲突

类型 “域名冲突”
href href 属性内的值
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 “使用相对 URL。”

注意:这是为了保证同一域内的其他页面通过相对路径而不是绝对路径进行链接。

慢速连接

类型 “慢速连接”
href href 属性内的值
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 “调试页面加载时间过长的原因。”

注意:检查器使用 HEAD 请求获取页面的元数据,这不应花费很长时间;因此,如果检查器在 5 秒后超时,检查器将认为该链接速度较慢。

差的链接文本

类型 “差的链接文本”
href href 属性内的值
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 “使用更具描述性和具体的措辞。”

注意:文本中的至少 2/3 的单词在黑名单中。

黑名单:

  • 检查
  • 点击
  • 详情
  • 详细信息
  • 下载
  • 查找
  • 这里
  • 信息
  • 信息
  • 学习
  • 链接
  • 更多
  • 现在
  • 其他
  • 页面
  • 阅读
  • 查看
  • 这个
  • 查看
  • 访问

URL链接文本

类型 "URL链接文本"
href href 属性内的值
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 "请使用描述链接的真实单词。"

文本过长

类型 "文本长度不佳"
href href 属性内的值
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 "理想的链接文本长度应在1到100个字符之间。"

注意:当前限制为100个字符。

不明确的PDF链接

类型 "不明确的PDF链接"
href href 属性内的值
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 "链接中应包含“PDF”一词。"

不明确的下载链接

类型 "不明确的下载链接"
href href 属性内的值
文本 标签内的文本(以及嵌套标签的文本)
HTML 标签的原始 HTML
建议 "链接中应包含“下载”一词。"

开发

  • $ composer install 安装所有依赖项

  • $ composer test 将运行所有测试(在Windows上使用 $ composer test-win)。要启用覆盖率分析,需要一个代码覆盖率驱动程序。我在Windows上开发时使用了 Xdebug。之后,运行 $ composer phpcov-merge(在Windows上使用 $ composer phpcov-merge-win),按照php-coveralls文档的说明,将 build/cov/coverage.covbuild/logs/clover.xml 合并。

  • 运行 $ composer style-fix-download 将最新的php-cs-fixer文件下载到项目目录。之后,您可以运行 $ composer style-fix来自动修复所有代码的风格。

贡献者

p1ho oburk