一分钟教你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


相关文章
|
14天前
|
IDE 开发工具 Android开发
移动应用开发之旅:探索Android和iOS平台
在这篇文章中,我们将深入探讨移动应用开发的两个主要平台——Android和iOS。我们将了解它们的操作系统、开发环境和工具,并通过代码示例展示如何在这两个平台上创建一个简单的“Hello World”应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧,帮助你更好地理解和掌握移动应用开发。
40 17
|
14天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
17天前
|
人工智能 安全 物联网
Android与iOS:移动操作系统的双雄争霸
在智能手机市场中,Android和iOS作为两大主流操作系统,各自拥有庞大的用户群体和独特的生态系统。本文将深入探讨这两种系统的发展历程、技术特点、市场表现以及未来趋势,以期为读者提供全面而深入的了解。通过对比分析,我们可以发现,尽管Android和iOS在某些方面存在竞争关系,但它们也在相互借鉴中不断进步和完善。
|
14天前
|
安全 生物认证 Android开发
深入探索iOS与Android操作系统的安全性差异
本文旨在通过对比分析iOS和Android两大主流移动操作系统在安全性方面的差异,揭示它们各自的安全机制、面临的挑战以及用户如何提升自身设备的安全保护。通过对系统架构、应用审核机制、数据加密方式及隐私政策的深入探讨,本文为读者提供了一个全面了解两大平台安全性的视角,并提出了实用的安全建议。
|
17天前
|
存储 安全 数据安全/隐私保护
深入解析iOS 14隐私保护功能:用户数据安全的新里程碑
随着数字时代的到来,个人隐私保护成为全球关注的焦点。苹果公司在最新的iOS 14系统中引入了一系列创新的隐私保护功能,旨在为用户提供更透明的数据使用信息和更强的控制权。本文将深入探讨iOS 14中的几项关键隐私功能,包括App跟踪透明性、简化的隐私设置以及增强的系统安全性,分析它们如何共同作用以提升用户的隐私保护水平。
59 3
|
14天前
|
开发工具 Android开发 iOS开发
Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
本文旨在深入探讨Android与iOS两大移动操作系统在技术架构、开发环境及市场表现上的核心差异,为开发者和技术爱好者提供全面的视角。通过对比分析,揭示两者如何塑造了当今多样化的移动应用生态,并对未来发展趋势进行了展望。 ####
|
15天前
|
存储 数据安全/隐私保护 Android开发
Android与iOS的隐私保护机制对比####
本文深入探讨了Android与iOS两大移动操作系统在用户隐私保护方面的策略与技术实现,揭示了两者在设计理念、权限管理、数据加密等方面的差异及其对用户体验的影响。通过对比分析,旨在为用户提供更全面的隐私保护认知,同时为开发者提供跨平台隐私保护的参考。 ####
23 0
|
2月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
75 4
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
64 4
|
21天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####