修改appium源码

背景

可以关注来点儿干货呀公众号~
上半年因为要把selenium grid和appium结合做UI的分布式执行,但是在过程中发现,我有几个例如5.0和5.0.1这种系统的手机时,任务不能准备的分发到对应的设备上执行,这时候排查了原因,是出在appium这块,所以对源码进行了一定的修改。

过程

这块对appium的架构及原理不做解释,直接从对应的代码入手。假设我们是通过npm install -g appium安装的appium,那它的源码就在/usr/local/lib/node_modules/appium下面。因为我们这边只讨论的是安卓设备,所以修改appium/node_modules/appium-android-driver/android-helpers.js这个文件。

   for (let device of devices) {
        // direct adb calls to the specific device
        await adb.setDeviceId(device.udid);
        let deviceOS = await adb.getPlatformVersion();

        // build up our info string of available devices as we iterate
        availDevicesStr.push(`${device.udid} (${deviceOS})`);

        // we do a begins with check for implied wildcard matching
        // eg: 4 matches 4.1, 4.0, 4.1.3-samsung, etc
        if (deviceOS.indexOf(opts.platformVersion) === 0) {
          udid = device.udid;
          break;
        }
      }

这段代码是helpers.getDeviceInfoFromCaps的一个实现,可以看到,是根据platformVersion去分配设备的,并在源码中的注释写到eg: 4 matches 4.1, 4.0, 4.1.3-samsung, etc。所以这块就造成了无法满足分配到我们需要的手机这个功能,随即,我对这段代码进行了一定的改造。

   for (let device of devices) {
        if (opts.deviceName == device.udid){
          await adb.setDeviceId(device.udid);
          let deviceOS = await adb.getPlatformVersion();
          availDevicesStr.push(`${device.udid} (${deviceOS})`);
          udid = device.udid;
          break;
        }

我们这边的想法是通过设备唯一的udid去分配,这样就准备分配到对应的设备上了。

后续

修改完成后,保存对应的代码,npm run build对应的依赖,重新启动appium即可使用你修改的代码了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值