Macaca 如何检查页面链接是否正确 [分享]

达峰的夏天 · 2016年12月09日 · 最后由 思寒_seveniruby 回复于 2016年12月11日 · 1468 次阅读

最近问这个问题的用户较多,介绍下适用 Macaca 如何检测 web 页面的链接情况,如某些链接是 404、302 等不正常情况。

静态检测

脚本比较好写,如下

it('deadlink check', function() {
  return driver
    .get(initialURL)
    .source()
    .then(html => {
      var anchors = html.match(/href=\"(.+)\"/g);
      var queue = [];

      anchors.map(anchor => {
        var _url = url.resolve(`${serverURL}/macaca-test/`, anchor.split('"')[1]);
        var p = new Promise(resolve => {
          urllib.request(_url, (err, data, res) => {
            if (err) {
              throw err; // you need to handle error
            }
            resolve({
              statusCode: res.statusCode,
              anchor: anchor
            });
          });
        });
        queue.push(p);
      });
      return Promise.all(queue)
        .then(res => {
          console.log('Links number: %s', res.length);
          var d = _.filter(res, d => {
            return d.statusCode === 200;
          });
          console.log('Bad links number: %s', res.length - d.length);
        });
    });
});

输出几行 log:

>> Links number: 10
>> Bad links number: 2

其它语言同理

其实就是使用了source等 API,解析出锚点链接,然后检测链接的正确性。其它语言可以照理实现。

动态渲染情况如何处理

页面经常有动态渲染的情况,但通过source方法只能拿到首出的 html。想要得到 js 动态创建的节点,需要在合适的时机通过execute方法获取即可。

driver.execute('document.querySelectorAll("a")').then(...)

看看示例?

Macaca 的更多示例和实践请到 Macaca 示例合集

共收到 1 条回复 时间 点赞

不错的思路

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册