移动端页面调试方法

1,230 阅读3分钟

前言

前段时间,我做了一个移动端拍照扫描名片后新建客户表单的需求。但是大家也知道,涉及拍照功能的需求咱基本只能在手机上面的测试环境下进行调试。今天我就把做这个需求遇到问题的调试方法记录下
以下方法适用于在本地环境不方便测试的功能:

alert

使用场景

不知道方法执行到哪一步/不知道有没有获取到参数/查看报错原因
由于这个需求的第一解决方案是传递base64格式图片链接给后端,所以这里使用了两个函数把图片转码,但是我发现传递给后端时报错了(这里也用alert输出了错误信息)

.catch(e => {
      alert('出错了:' + Json.stringify(e))
 })

注:alert输出参数时要把参数Json.stringify() 之后才能取到值
这里我输出的错误信息里面有状态码,问了下后端说的图片链接没传过来
于是我首先想到的是调用拍照api成功后是否返回参数:

  onSuccess: function (result) {
    that.uploadImage = result[0]
    alert('图片链接:' + Json.stringify(result[0]))
  },

发现图片链接是有返回的,那么就是转码图片的方法有问题了:

// 转化为base64
image2Base64 (img) {
  alert('执行了image2Base64方法’)
  var canvas = document.createElement('canvas')
  canvas.width = img.width
  canvas.height = img.height
  var ctx = canvas.getContext('2d')
  ctx.drawImage(img, 0, 0, img.width, img.height)
  return canvas.toDataURL('image/jpeg')
},
  // 获得base64格式
    getImgBase64 (url) {
      alert('执行了getImageBase64方法’)
      let that = this
      let base64 = ''
      let img = new Image()
      img.src = url
      img.crossOrigin = ''
      if (img.complete) {
        base64 = that.image2Base64(img)
        console.log('8888888', encodeURIComponent(base64))
      }
    },

发现没有执行image2Base64方法,也就是说if里面是不成立的
这个时候我复制了这段代码到别的页面,然后给了一个固定的图片URL(就是之前alert出来的那个,把它记录下来了)
果然,这个方法是有问题的,钉钉的api返回的照片用这个方法存在跨域问题(总之后来就用其他方法把数据传过去了)

lightProxy抓包

使用场景

想看请求接口返回字段/传递的参数
接上文,进入新建表单页面时,发现我需要的一个文本框没有相应值,不知道后端有没有传递相应值给我,这个时候就要用到lightProxy了 首先去下载一个lightProxy 点击手机代理,扫码下载证书,然后按照你的页面信息配置一下你的WiFi代理

image.png

image.png 然后当你的手机和电脑在一个局域网时,你操作你的手机,就能得到你请求的接口以及接口信息了,如图:

image.png 当然,lightProxy还有很多其他功能,这个大家可以去官网看下教程

mock模拟流程

使用场景

得到返回参数之后的本地调试
接上文,当我拿到后端返回的字段列表之后,我发现后端已经返回了我想要的数据但是前端没有渲染出来,这个时候就可以用mock模拟请求接口了 使用mock的方法有很多种,包括lightProxy也是有mock模拟的功能的,我这里是使用了ypai里面的mock来模拟扫描名片已经成功后返回了参数来新建表单的流程

image.png 如图,在添加的期望里面的Body中加入复制的后端返回字段,并且启用那个接口的mock(之后记得重启下项目)

image.png

然后在我们请求这个接口的时候,就能返回固定的数据来新建表单页面了并且可以在本地调试了(这个时候各种本地调试工具啊debugger什么的就能用上了)
至于mock的使用方法,每个公司的代码可能都不一样,可以看看自己公司的config文件中有没有加入mock调试的代码 image.png 如果没有的话,可以搜索下其他方法来进行mock哦。