首页 > 解决方案 > 无法使用 pa11y 操作登录网站

问题描述

我似乎无法使用 pa11y 和它的“操作”功能登录网站。我发现的有关 pa11y 操作的文档和网站似乎表明这是一件简单的事情,但我没有运气。

我尝试登录各种站点,从已建立的站点 (GitHub) 到托管在云中的我自己的站点,甚至是在我的本地计算机上运行的站点。在“等待 url 更改”操作发生之前,它们都进入登录表单提交按钮(通常是 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);
  }

}

标签: javascriptpuppeteergoogle-chrome-headlesspa11y

解决方案


我遇到过同样的问题。我设法通过结合以下内容来传递登录页面:https ://github.com/emadehsan/thal和此处的示例https://github.com/pa11y/pa11y/blob/master/example/puppeteer/index.js . 也许它可以帮助你。


推荐阅读