无法使用 pa11y 操作登录网站

Unable to use pa11y actions to login to sites

我似乎无法使用 pa11y 和它的 'actions' 功能登录网站。我找到的有关 pa11y 操作的文档和网站似乎表明这是一件简单的事情,但我运气不好。

我尝试登录各种网站,从已建立的网站 (GitHub),到我自己在云中托管的网站,甚至 运行ning 在我本地机器上的网站。在 "wait for url to change" 操作发生之前,它们都到达登录表单提交按钮的 "click" 操作(通常是 POST 请求),然后挂起并最终超时。

如果我将 headless 设置为 false 并在 Chromium 中打开检查器,我可以看到 POST 请求是在单击登录按钮后发出的,但它从未完成。有趣的是,当我针对我控制的站点尝试此操作并可以看到其日志时,我看到服务器端发生了成功的登录,但是 pa11y(也许它真的是一个 puppeteer 或 headless-chrome 问题)似乎从来没有收到回应。

我已经包含了我为 GitHub 尝试过的代码,但它不起作用。我在 Mac 到 运行 上使用 Node 8.11.3。我什至在第二台电脑上试过,但仍然有同样的问题。该代码基于 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);
  }

}

我遇到了同样的问题。我设法通过组合这个登录页面:https://github.com/emadehsan/thal and the example from here https://github.com/pa11y/pa11y/blob/master/example/puppeteer/index.js。或许对你有帮助。

问题似乎源于使用某些版本的 puppeteer 库,它是 pa11y 的依赖项。使用 puppeteer 1.6.2 会产生一个工作环境。使用 puppeteer 1.7.0 会导致超时问题。通过在我的 package.json 文件中的 pa11y 依赖项旁边指定 "puppeteer": "~1.6.0",,我能够自己修复此问题。当前版本的 Pa11y 可以与低至 1.4.0 的任何版本的 puppeteer 一起愉快地工作。

这里是关于 GitHub 的相关问题,供 pa11y 库更新:https://github.com/pa11y/pa11y/issues/421