@testcafe-сообщество/axe не сообщает о нарушениях, которые совершают другие инструменты

#selenium-webdriver #automation #accessibility #testcafe #axe

Вопрос:

Я изучаю инструменты, которые могу использовать для автоматического тестирования доступности, и хотел попробовать axe-core с TestCafe. Я сторонник TestCafe, мне нравится, что это легкий инструмент, который не зависит от WebDriver. Документы отличные, а написание сценариев простое.

Однако я обнаружил, что @testcafe-сообщество/axe и его предшественник axe-testcafe сообщают не обо всех нарушениях, в то время как axe-core с селеном и axe-webdriverjs сообщают. Например, при работе с axe-webdriverjs у меня есть следующий код и результирующий вывод, показывающий нарушения страницы локального хоста, которую я проверяю —

Код:

 var AxeBuilder = require('axe-webdriverjs');
var WebDriver = require('selenium-webdriver');

const path = require('path');
process.env.PATH = path.resolve(`__dirname/../WebDriver/bin/Firefox/0.29.1`)   ':'   process.env.PATH;

var driver = new WebDriver.Builder()
  .forBrowser('firefox')
  .build();

driver
  //.get('https://dequeuniversity.com/demo/mars/')
  .get('http://localhost:3000')
  .then(function() {
    AxeBuilder(driver).analyze(function(err, results) {
      if (err) {
        // Handle error somehow
      }
      console.log(results.violations);
    });
  });
 

Выход:

 > axe-webdriverjs-tests@1.0.0 test1 /Users/nabeen.jamal/gitlab.com/notifications-service/text-messaging-application/tma-test/app/axe-webdriverjs-tests
> node test/axe.test1.js

[
  {
    description: 'Ensures all page content is contained by landmarks',
    help: 'All page content must be contained by landmarks',
    helpUrl: 'https://dequeuniversity.com/rules/axe/3.5/region?application=webdriverjs',
    id: 'region',
    impact: 'moderate',
    nodes: [ [Object], [Object] ],
    tags: [ 'cat.keyboard', 'best-practice' ]
  }
]
 

Используя @testcafe-сообщество/axe и следуя инструкциям «Как использовать» на странице проекта github (https://github.com/testcafe-community/axe), у меня есть следующий код и результирующий вывод, который не показывает нарушений одной и той же страницы локального хоста.

Код:

 import { checkForViolations } from '@testcafe-community/axe';

fixture `TestCafe tests with Axe`
    //.page `http://example.com`;
    .page `http://localhost:3000`;

test('Automated accessibility testing', async t => {
    // do stuff on your page
    await checkForViolations(t);
});
 

Выход:

 nabeen.jamal@DEM-C02DFG1UMD6M axe-testcafe-tests % npx testcafe --config-file cfg/testcaferc.json chrome src/test1.js 
(node:88006) ExperimentalWarning: Conditional exports is an experimental feature. This feature could change at any time
(node:88006) ExperimentalWarning: Package name self resolution is an experimental feature. This feature could change at any time
 Running tests in:
 - Chrome 90.0.4430.212 / macOS 10.15.7

 TestCafe tests with Axe
 ✓ Automated accessibility testing


 1 passed (0s)
 

Как видно из выходных данных, тест @testcafe-community/axe проходит и не показывает нарушений, в то время как axe-webdriverjs (и axe-core с селеном) показывает нарушение в отношении «всего содержимого страницы, содержащегося в ориентирах».

Является ли это ограничением в @testcafe-community/axe, или вам нужно указать правила в параметре параметров axe.run, чтобы он выполнял проверки отображаемого содержимого загруженной страницы?

Ответ №1:

В документации для axe-core указано, что вам необходимо указать, какие правила вы собираетесь протестировать с использованием axe.run опций.

Ориентиры обсуждаются в WCAG 1.3.6., который является элементом «уровня AAA«. Похоже, что axe-core способен тестировать только на «Уровне A» и «Уровне AA«. В вашем примере этот элемент не указан инструментом как ошибка WCAG, а скорее рекомендация по лучшей практике. Возможно, именно поэтому он не отображается в других ваших инструментах.

Если вы можете легко выполнить эту рекомендацию, то я бы сказал, что продолжайте и сделайте это. Если нет, я бы не позволил чему-то подобному помешать запуску моего кода в производство. Достопримечательности приятны, но гораздо важнее, чтобы вы соответствовали всем требованиям «Уровня А» и как можно большему количеству требований «Уровня АА«, насколько это возможно.

Стоит отметить, что любой автоматизированный инструмент тестирования доступности-это не более чем отправная точка для ручной оценки. Эти инструменты часто генерируют тонны ложных срабатываний (и иногда пропускают важные вещи!) потому что часто невозможно алгоритмически определить, действительно ли что-то полезно для посетителей-людей.

Я также видел страницы/приложения, которые передают автоматизированные инструменты без ошибок (Wave, Axe и т. Д.), Но их совершенно невозможно использовать с помощью вспомогательных технологий.

Комментарии:

1. Спасибо вам за ваш ответ и за эту полезную информацию. Я постараюсь указать правила в axe-run параметрах и посмотрю, что это даст. Отправлю ответ. И, конечно же, понимал, что автоматическое тестирование доступности-это не более чем отправная точка для ручной проверки WCAG с помощью вспомогательных технологий.

Ответ №2:

Я не уверен на 100%, как это сделать, но мои тесты с использованием axe-testcafe и @testcafe-community/axe теперь показывают нарушение —

  Running tests in:
 - Chrome 90.0.4430.212 / macOS 10.15.7

 TestCafe tests with Axe
 ✓ Verify Welcome Page loads properly
 ✖ Automated accessibility testing

   1) AssertionError: 1 violations found:
      1) All page content must be contained by landmarks
      * https://dequeuniversity.com/rules/axe/3.5/region?application=axeAPI
      * cat.keyboard, best-practice
      * moderate
      * region
          "#global-cookie-message"
        ".app-phase-banner"
      : expected false to be truthy

      Browser: Chrome 90.0.4430.212 / macOS 10.15.7

         67 |const checkForViolations = async (t, context, options) => {
         68 |    const { error, results } = await axeCheck(t, context, options);
         69 |
         70 |    await t.expect(error).notOk();
         71 |
       > 72 |    await t.expect(results.violations.length === 0).ok(createReport(results.violations));
         73 |}
         74 |
         75 |
         76 |module.exports = {
         77 |    runAxe,

         at checkForViolations
      (/Users/nabeen.jamal/gitlab.com/notifications-service/text-messaging-application/tma-test/app/axe-testcafe-tests/node_modules/@testcafe-community/axe/index.js:72:53)



 1/2 failed (1s)
 

Мне не нужно было указывать правила в параметре options для axe.run — я сделал это, но с или без, теперь о нарушении сообщается.

Однако я удалил и переустановил пакеты узлов, и я думаю, что версия axe-core отличается от той, что была у меня ранее. Вот мои зависимости и версии в моем пакете.json, которые работают для меня —

 {
  "name": "axe-testcafe-tests",
  "version": "1.0.0",
  "description": "axe-core and TestCafe testware to cover Accesibility Testing of the TMA App",
  "main": "index.js",
  "dependencies": {
    "testcafe": "^1.14.2"
  },
  "devDependencies": {
    "@testcafe-community/axe": "^3.5.0",
    "axe-core": "^3.5.5",
    "axe-testcafe": "^3.0.0"
  },
<-- snip -->
 

Еще раз спасибо @Josh за вашу помощь. Возможно, это могло бы помочь другим.