一分钟教你Android、iOS如何实现自动化截长图功能,超实用!

简介: 在移动端自动化测试过程中经常会遇到需要截长图的场景,比如大促活动的H5页面、动态信息流页面等,但是目前在网上检索只能搜到关于截长图的软件推荐,没有讲关于如何通过自动化脚本的方式实现的文章,今天就来给大家分享一个简单的实现方案。

方案


在实现截长图的自动化方案中,图像融合是一个重要的环节,这里推荐大家一个不错的图像融合服务:vision-ui


服务部署

该服务支持源代码和docker容器两种方式部署,这里我以容器部署方式为例,首先肯定是需要有Docker环境,然后下载远程镜像:

docker pull brighthai/vision-ui:latest

启动容器,如果本地需要处理的图像文件在/User/image(根据实际替换为实际路径)本地使用的服务端口为9092,执行如下命令启动容器:

docker run -it -d --name container_vision -p 9092:9092 -v /User/image:/vision/capture brighthai/vision-ui


Android


先安装依赖:

pip install requestspip 
install pillow

我们只需要在设备上获得连续的几张截图,就可以还原页面的实际空间展示,这里我们在页面上截图后向上滑动25%屏幕长度的距离再截图,重复上述步骤后获得几张前后连续的图像,然后调用上面的服务接口完成图像融合,具体实现如下:

import os
import time
import requests
from PIL import Image
def get_long_screenshot(times):
    image_list = []
    server_addr = '/Users/mafei/images'
    img = str(int(time.time() * 1000)) + ".png"
    os.system('adb shell screencap -p /sdcard/{0}'.format(img))
    os.system('adb pull /sdcard/{0}'.format(img))
    img_obj = Image.open(img)
    width = img_obj.width
    height = img_obj.height
    # 开始截图,向上滑动25%
    for i in range(times):
        img_name = str(int(time.time() * 1000)) + ".png"
        os.system('adb shell screencap -p /sdcard/{0}'.format(img_name))
        os.system('adb pull /sdcard/{0} {1}'.format(img_name, server_addr))
        image_list.append(img_name)
        x1 = int(width * 0.5)
        x2 = int(width * 0.5)
        y1 = int(height * 0.5)
        y2 = int(height * 0.25)
        os.system('adb shell input swipe {0} {1} {2} {3} 900'.format(x1, y1, x2, y2))
    image_merged = "image_merge_{0}.png".format(str(int(time.time() * 1000)))
    payload = {
        "image_list": image_list,
        "name": image_merged
    }
    headers = {
        'Content-Type': 'application/json; charset=UTF-8'
    }
    requests.request("post", url="http://127.0.0.1:9092/vision/merge", timeout=10, json=payload, headers=headers)
    image_merged = server_addr + "/" + image_merged
    return image_merged
get_long_screenshot(3)


iOS


iOS的自动化方案相比Android稍微有点麻烦,需要先在iOS设备上安装WebDriverAgent,具体如何在iOS真机安装WebDriverAgent,可以参考文章《iOS真机安装WebDriverAgent图文详解》。


这里我们默认大家已经给设备安装好了WDA,并且通过Xcode或者xcodebuild启动了WebDriverAgent,那么接下里只需要再安装一些依赖:

pip install requests
pip install pillow
pip install airtest

实现iOS自动化的方式有很多,这里我们选择Airtest框架来完成UI的驱动,具体代码如下:


import os
import time
import requests
from PIL import Image
from airtest.core.api import swipe, connect_device
def get_ios_long_screenshot(times):
    connect_device("ios:///169.254.66.2:8100")
    image_list = []
    server_addr = '/Users/mafei/images'
    # 获取设备长宽
    img = str(int(time.time() * 1000)) + ".png"
    os.system("tidevice screenshot {0}".format(img))
    img_obj = Image.open(img)
    width = img_obj.width
    height = img_obj.height
    # 开始截图,向上滑动25%
    for i in range(times):
        img_name = str(int(time.time() * 1000)) + ".png"
        os.system("tidevice screenshot {0}/{1}".format(server_addr, img_name))
        image_list.append(img_name)
        x1 = int(width * 0.5)
        x2 = int(width * 0.5)
        y1 = int(height * 0.5)
        y2 = int(height * 0.25)
        swipe((x1, y1), (x2, y2))
    image_merged = "image_merge_{0}.png".format(str(int(time.time() * 1000)))
    payload = {
        "image_list": image_list,
        "name": image_merged
    }
    headers = {
        'Content-Type': 'application/json; charset=UTF-8'
    }
    requests.request("post", url="http://127.0.0.1:9092/vision/merge", timeout=10, json=payload, headers=headers)
    image_merged = server_addr + "/" + image_merged
    return image_merged
get_ios_long_screenshot(3)


效果


Android

滑动3次的过程如下:

image.png

最终融合的效果如下:

微信图片_20220519185903.jpg

iOS

滑动3次的过程如下:

微信图片_20220519185908.jpg

最终融合效果如下:

image.png


相关文章
|
19小时前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
13 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
2月前
|
安全 生物认证 Android开发
深入探索iOS与Android操作系统的安全性差异
本文旨在通过对比分析iOS和Android两大主流移动操作系统在安全性方面的差异,揭示它们各自的安全机制、面临的挑战以及用户如何提升自身设备的安全保护。通过对系统架构、应用审核机制、数据加密方式及隐私政策的深入探讨,本文为读者提供了一个全面了解两大平台安全性的视角,并提出了实用的安全建议。
|
2月前
|
存储 安全 数据安全/隐私保护
深入解析iOS 14隐私保护功能:用户数据安全的新里程碑
随着数字时代的到来,个人隐私保护成为全球关注的焦点。苹果公司在最新的iOS 14系统中引入了一系列创新的隐私保护功能,旨在为用户提供更透明的数据使用信息和更强的控制权。本文将深入探讨iOS 14中的几项关键隐私功能,包括App跟踪透明性、简化的隐私设置以及增强的系统安全性,分析它们如何共同作用以提升用户的隐私保护水平。
191 3
|
2月前
|
监控 搜索推荐 数据安全/隐私保护
深入探索iOS 14的隐私保护功能
本文将深入探讨iOS 14操作系统中的隐私保护功能,包括新的隐私指示器、应用程序跟踪透明度以及增强的隐私设置。我们将分析这些功能如何提高用户对个人数据的控制权,并讨论它们对应用开发者和广告行业的影响。
74 1
|
2月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统架构差异及其对开发者的影响
本文旨在通过对比分析iOS和Android两大移动操作系统的系统架构,探讨它们在设计理念、技术实现及开发者生态方面的差异。不同于常规摘要仅概述内容要点,本摘要将简要触及核心议题,为读者提供对两大平台架构特点的宏观理解,铺垫
|
3月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
349 4
|
3月前
|
存储 安全 数据安全/隐私保护
深入探索iOS与Android的隐私保护机制
在数字化时代,智能手机已成为我们生活中不可或缺的一部分,而随之而来的隐私安全问题也日益凸显。本文旨在对比分析iOS和Android两大操作系统在隐私保护方面的策略和技术实现,揭示它们在设计理念、权限管理、数据加密等方面的不同之处,为读者提供一个全面了解两大系统隐私保护机制的视角。
|
3月前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
3月前
|
安全 Android开发 数据安全/隐私保护
深入探讨iOS与Android系统安全性对比分析
在移动操作系统领域,iOS和Android无疑是两大巨头。本文从技术角度出发,对这两个系统的架构、安全机制以及用户隐私保护等方面进行了详细的比较分析。通过深入探讨,我们旨在揭示两个系统在安全性方面的差异,并为用户提供一些实用的安全建议。
|
3月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统的差异性及优化策略
在当今数字化时代,移动操作系统的竞争尤为激烈,其中iOS和Android作为市场上的两大巨头,各自拥有庞大的用户基础和独特的技术特点。本文旨在通过对比分析iOS与Android的核心差异,探讨各自的优势与局限,并提出针对性的优化策略,以期为用户提供更优质的使用体验和为开发者提供有价值的参考。

热门文章

最新文章

  • 1
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    24
  • 2
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    33
  • 3
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    28
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 5
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    143
  • 6
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    234
  • 7
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    90
  • 8
    深入探索iOS开发中的SwiftUI框架
    143
  • 9
    ios样式开关按钮jQuery插件
    58
  • 10
    Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
    75