Кажется, я не могу войти на сайты с помощью pa11y и его функции «действия». Документация и сайты, которые я нашел, рассказывающие о действиях pa11y, похоже, указывают на то, что это простое дело, но мне не повезло.
Я пытался войти на различные сайты, начиная от установленных сайтов (GitHub) и заканчивая моими собственными сайтами, размещенными в облаке, и даже сайтами, работающими на моем локальном компьютере. Все они доходят до действия «щелчок» для кнопки отправки формы входа (обычно это запрос POST), затем зависают и, в конечном итоге, истекают по тайм-ауту, прежде чем происходит действие «ожидание изменения URL».
Если я установлю для headless
значение false и открою инспектор в Chromium, я увижу, что запрос POST выполняется после нажатия кнопки входа, но он никогда не завершается. Интересно, что когда я пробую это на сайтах, которые я контролирую и могу просматривать журналы, я вижу, что успешные входы в систему происходят на стороне сервера, но pa11y (может быть, это действительно проблема кукловода или безголового хрома), кажется, никогда не получает ответ.
Я включил код, который пробовал для GitHub, но он не работает. Я использую Node 8.11.3 на Mac для запуска. Я даже пробовал на втором компьютере и все еще та же проблема. Код основан на примере, приведенном в документации pa11y, и изменен лишь незначительно (https://github.com/pa11y/pa11y/blob/master/example/actions/index.js).
Что я делаю не так?
'use strict';
const pa11y = require('pa11y');
runExample();
async function runExample() {
try {
var urlToTest = 'https://github.com/login';
const result = await pa11y(urlToTest, {
actions: [
'navigate to https://github.com/login',
'set field #login_field to MYUSERNAME',
'set field #password to MYPASSWORD',
'click element #login input.btn.btn-primary.btn-block',
// everything stops here...
'wait for url to not be https://github.com/login',
'navigate to https://github.com/settings/profile',
'screen-capture github.png'
],
chromeLaunchConfig: {
headless: false,
slowMo: 250
},
log: {
debug: console.log,
error: console.error,
info: console.log
},
timeout: 90000
});
console.log(result);
} catch (error) {
console.error(error.message);
}
}