学会这一招,轻松玩转 app 中混合应用自动化测试

news2024/12/26 11:49:38

♥  前  言

现在的 app 中越来越多的页面通过 H5 来做了,理由很简单,不需要升级 app 就能让用户使用新的功能。这就苦了我们测试工程师了,混合应用自动化不会玩。今天咱们来聊一聊 app 中混合应用自动化怎么做。

一、环境准备

  1. appium==1.21.0

  2. JDK 版本 ==1.8

  3. android-sdk==Version 29.0.4-5871666

  4. python == 3.7.9

二、步骤

  1. 识别 app 中是否内嵌 h5

  2. 开启 WebView 调试模式

  3. 安装 h5 元素定位工具

  4. 获取获取所有的 contexts

  5. 切换到对应的 contexts

  6. 下载对应 WebView 版本驱动程序

  7. 在 H5 中进行元素定位和操作

  8. 如有需要 h5 操作完之后切回 app

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337

三、步骤详解

第一步:识别 app 中是否内嵌 h6
  1. 手机上开发者选项、打开布局边界,打开被测 app,页面中无布局的就是 h5 内容

  2. 使用定位工具:如果元素上 className:android.webkit.WebView 则为 h5 内容

  3. 问开发(不推荐,显得你很不专业)

第二步:开启 WebView 调试模式
  1. Web 端我们直接按 F12 就能进入调试模式,进行元素定位,app 端是不可以这样操作的,我们打开 app 内嵌 H5 页面的 WebView 调试模式,才能像在 Web 端一样查看元素,写元素定位表达式

  2. 具体方式参考【歪歪老师】的文章:https://www.cnblogs.com/yyoba/p/11149614.html

第三步:安装 h6 元素定位工具
  1. 下载安装 uc-devtools(下最新版本):https://dev.ucweb.com/download/?spm=ucplus.11213647.c-header.6.6a0d2604yxauSH

  2. 打开 uc-devtools 工具,只要手机连接到电脑成功,uc-devtools 自动连接你手机

  3. 点设置,勾选本地 Devtools Inspector UI 资源

    图片

  4. 如果 app 页面有 H5 资源,在 Home 页面会自动识别到
    app 页面为 h5 页面

    图片

    uc-devtools 自动识别:

    图片

    直接点击对应的 inspect,就可以看到熟悉的 Web 元素定位页面了

第四步:获取获取所有的 contexts
  1. contexts = driver.contexts

  2. ['NATIVE_APP', 'WEBVIEW_com.lemon.lemonban']

  3. 说明:NATIVE_APP 为安卓原生、WEBVIEW_com.lemon.lemonban 为 h5

第五步:切换到对应的 contexts
  1. driver.switch_to.context(contexts[1])

  2. 这个 WEBVIEW_com.lemon.lemonban 一般不会变,可以写死 driver.switch_to.context("WEBVIEW_com.lemon.lemonban")

第六步:下载对应 WebView 版本驱动程序
  1. 下载地址(我用的是 chrome):http://npm.taobao.org/mirrors/chromedriver/

  2. 通过定位工具获取 WebView 版本信息

    图片

  3. 在启动参数增加驱动位置设置 desired_caps["chromedriverExecutable"]="刚下载好的驱动位置"

第七步:在 H5 中进行元素定位和操作

Web 中元素定位和操作这里不讲了

第八步:h6 操作完之后切回 app

driver.switch_to.context('NATIVE_APP')

四、演示代码

import time
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
desired_caps = {
'automationName':'UiAutomator2',
'platformName':'Android',
'platformVersion':'7.1.2',
'deviceName': 'xiaomi',
'appPackage':'com.lemon.lemonban',
'appActivity':'.activity.MainActivity',
'noReset':'True',
'chromedriverExecutable':r'D:\chromeDriver\6769\chromedriver.exe'
}
driver = webdriver.Remote(command_executor='http://localhost:4723/wd/hub', desired_capabilities=desired_caps)

wait = WebDriverWait(driver=driver,timeout=10)
time.sleep(2)

# 点柠檬社区
loc1=(MobileBy.ANDROID_UIAUTOMATOR,'resourceId("com.lemon.lemonban:id/category_title").text("柠檬社区")')
ele1  =wait.until(EC.visibility_of_element_located(locator=loc1))
time.sleep(2)
ele1.click()
time.sleep(2)

# 获取所有的contexts
all_contexts = driver.contexts
print('所有的contexts:',all_contexts)
time.sleep(2)
# 切换到html对应的context
driver.switch_to.context("WEBVIEW_com.lemon.lemonban")
print('切换成功')
# MobileSwitchTo(driver=driver).context(context_name="WEBVIEW_com.lemon.lemonban")
time.sleep(2)

#定位H5中的注册
loc2=(MobileBy.XPATH,'//a[text()="注册"]')
ele2  = wait.until(EC.visibility_of_element_located(locator=loc2))
time.sleep(2)
ele2.click()
time.sleep(20)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1045450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虹科案例 | 虹科PLC助力纯水冷却机实现精准温度控制

文章来源:虹科工业控制事业部 点击阅读原文:https://mp.weixin.qq.com/s/3gv4M82YhDHCo_cq78EanA 案例概况 客户:Efficient Energy 应用:纯水冷却机 (一)应用背景 制冷技术在许多不同行业中得到广泛应用&…

仿射变换案例

1.什么是仿射变换 仿射变换(Affine Transformation)其实是另外两种简单变换的叠加:一个是线性变换,一个是平移变换 仿射变换变化包括缩放(Scale、平移(transform)、旋转(rotate)、反射(reflection,对图形照镜子)、错切(shear mapping,感觉像是一个图形的倒影),原来的…

深入理解 pytest.main():Python 测试框架的核心功能解析

前言 笔者平常运行pytest用例时,通常使用命令行方式,像这样 pytest -v pxl/test_dir/test_demo.py::TestDemo::test_my_var,执行某一条case,但每次命令行敲也挺麻烦的。那如何在python代码中调用pytest呢?带着疑问一…

github搜索技巧

指定语言 language:java 比如我要找用java写的含有blog的内容 搜索项目名称包含关键词的内容 vue in:name 其他如项目描述跟项目文档,如下 组合使用 vue in:name,description,readme 根据Star 或者fork的数量来查找 总结 springboot vue stars:>1000 p…

记录使用iText7查找PDF内容关键字坐标,加盖电子签名、印章

一、前言 项目以前签字都是由C端那边进行合成操作,最近项目要求把那块功能,由后端进行实现,其中包含坐标、关键字、任意位置进行签字操作,坐标是最容易实现的,曾经也写过类似的功能在(添加图片印章到PDF&a…

解锁工业 4.0 元宇宙:AR/VR、AI 和 3D 技术如何为下一次工业革命提供动力

原创 | 文 BFT机器人 沉浸式混合现实和由虚拟现实(VR)和增强现实(AR)组成的扩展现实技术仍然是业务创新和扩张的关键驱动因素。通过改变公司的运营、与客户互动和实现目标的方式,这一技术解决方案集已在多个行业产生了…

认证-authentication 和授权-authorization

就好比你可以刷卡进去xxx大厦(认证是本公司职员),但无法刷卡进入金融部门,或 实验部门(因为没有授权)

无线通信——Mesh自组网特点

Mesh,它的中文叫作无线网格状网络。作为当下最为灵活、高效、便捷的扩大信号覆盖的通信解决方案之一,Mesh组网得到了极大推广。其主要应用于:(无人机/车/船、特种机器人、巡检、应急安防(如城市应急、抢险救援、城区覆…

蜜雪冰城涨价怒赞无数 雪王张红超卷出一条阳道

作者:积溪 简评:最近雪王涨价一元登上了热搜,但评论区却是一片和谐,雪王的魅力究竟是如何养成的?#蜜雪冰城 #雪王 #张红超 #奶茶 别的品牌涨价,只有吐槽声一片;但它涨价,却是网友们…

如何在前端项目中管理依赖关系?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用包管理工具⭐ 使用版本控制系统⭐ 使用依赖管理工具⭐ 使用CDN⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对W…

MyBatis Generator 代码自动生成器

一、什么是逆向工程 Mybatis的逆向工程就是由代码生成器生成我们需要的代码和映射文件。我们在编写Mybatis程序时,基本都是围绕着pojo类,Mapper接口,Mapper.xml文件等文件来进行的。如果实际开发中数据库的表特别多,那么我们需要手…

超全超详细的Redis笔记-数据类型及其使用、主从复制、哨兵模式、缓存穿透、击穿、雪崩

文章目录 狂神聊Redis1、Nosql概述1.1、为什么要用Nosql1.2、什么是NoSQL1.3、NoSQL的四大分类 2、Redis 入门2.1、概述2.2、Windows 安装2.3、Linux安装2.4、测试性能2.5、Redis基础知识 3、五大基本数据类型3.1、Redis-Key3.2、String3.3、List3.4、Set3.5、Hash(…

基于SSM的实习管理系统

基于SSM的实习管理系统、前后端分离 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 管理员界面 教师 学生 研究背景 基于SSM的实习管理系统是一个基于Spring、Spring…

【计算机网络】网络层和数据链路层

文章目录 IP协议网段划分分类划分法CIDR 方案路由NAT网络地址转换技术IP报文的另外三个参数mac帧ARP协议交换机ICMP代理服务器 IP协议 TCP有将数据 可靠、高效 发给对方的 策略,而IP具有发送的能力,即将数据从A主机送到B主机的 能力 。 用户要的是100%…

GeoPandas和Matplotlib地图高亮显示——与中国建交的国家(不全)

GeoPandas和Matplotlib地图高亮显示——与中国建交的国家(不全) 一、概要二、整体架构流程三、完整代码 一、概要 这段代码是使用GeoPandas和Matplotlib库在Python中绘制世界地图的一个例子,它突出了与中国建交的国家(部分&#x…

​数据库查询进阶--多表查询

目录 目录 1. 概述 2. 内连接(Inner Join) 2.1 语法 2.2 示例 3. 左连接(Left Join) 3.1 语法 3.2 示例 4. 右连接(Right Join) 4.1 语法 4.2 示例 5. 全外连接(Full Outer Join&am…

vue实现进度条+背景定位

最近在做一个数字孪生项目,用于展示地铁车辆的进场动画及部件,使用的vueunity,但是 unity模型在加载完成之前会有个加载进度条,页面背景色是黑色,中间只有个一进度条框 可以看到很单调很丑,并且客户也不满…

2023软件测试八股文,涵盖所有面试题

Part1 1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自…

如何优化前端性能?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 优化前端性能1. 减少HTTP请求2. 压缩资源3. 使用浏览器缓存4. 使用CDN5. 延迟加载6. 使用响应式设计7. 减少重绘和回流8. 代码优化9. 使用现代Web技术 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前…

vue event bus 事件总线

vue event bus 事件总线 创建 工程: H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\08-事件总线-扩展 vue --version vue crea…