Appium自动化(15) - 针对 webview 进行自动化测试

简介: Appium自动化(15) - 针对 webview 进行自动化测试

如果你还想从头学起Appium,可以看看这个系列的文章哦!

https://www.cnblogs.com/poloyy/category/1693896.html

 

webview 简介


  • WebView是android中一个非常重要的控件
  • 它的作用是用来展示一个web页面,它使用的内核是 webkit 引擎,Android 4.4版本之后,直接使用 Chrome 作为内置网页浏览器
  • 简单理解:就是App 中内嵌了一个浏览器
  • 类比:Web 浏览器里面的 iframe

 

做 webview 自动化测试前的准备


需要让开发在app中添加 webview 调试代码,yinw


protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     WebView myWebView = (WebView) findViewById(R.id.jcywebview);
    # 添加这一行 
     myWebView.setWebContentsDebuggingEnabled(true);
 };



注意:从应用市场下载的app不具备此条件哦

跟开发说一声:帮我开启 webview debug 模式就可以啦~

 

查看 webview 里面的网页元素


第一种情况:被测试应用webview不依赖app

  1. 把webview 的 url 复制出来,在Web 中打开
  2. 按F12,进入开发者模式
  3. 选择手机模式

 

第二种情况:被测应用webview与app原生有交互,依赖app

方法:通过chrome 浏览器的远程调试功能(前提是本电脑可以爬梯子上网)

  • app 已打开
  • 打开chrome 浏览器,地址输入 chrome://inspect (如下图)
  • 确认 webview 版本【下图:66.0.3359.158就是版本】
  • 点击对应app 的 inspect 按钮

image.png


注意:有的系统比较老的,比如android 4.4 对应的 webview 的版本比较老 ,比如33.0 的,可能不能inspect, 所以尽可能使用新一些的android 版本

点击 inspect 之后,就可以像看网页一样啦!可以随意定位 webview 页面的元素了


image.png


确认手机 webview版本


方式一:电脑chrome浏览器访问 chrome://inspect

翻上去,前面已经讲啦【注意标红文字】

方式二:手机设置

在手机设置页面,搜索webview就可以啦

image.png


方式三:报错信息

如果前两种方式都不行,只能通过报错了,先随便下一个 webdriver,然后运行;如果版本不匹配就会有报错信息,上面就有版本信息,如下图


image.png


81.0.4044 就是我的版本信息,后面还友好的跟着版本对应列表,下面有讲到

 

下载对应版本的 webdriver

webview 版本对应哪个 webdriver 版本,具体可以看下面这个链接哦

https://raw.githubusercontent.com/appium/appium-chromedriver/master/config/mapping.json

然后下载对应版本的 webdriver 可以看这个链接

https://npm.taobao.org/mirrors/chromedriver

 

注意这里有个坑

如果你在做 app 自动化测试,然后就手机装了chrome 浏览器,需要删掉;不然webview 版本和 chrome 版本不一样的话,即使你提供的驱动版本符合 webview 版本,也会报错。。

 

针对 webview 自动化测试

其实满简单的,和Selenium 切换至 iframe 差不多的顺序,先看看伪代码的步骤

  1. 查看app 当前有哪些的 context
  2. 要了解app 原生控件的 context 命名
  3. 然后了解 webview 控件的 context 命名
  4. 切换到  webview context
  5. 操作 webview 页面内容
  6. 操作完了,切换回app context

 

context 是啥?

  1. 可以理解成 appium 操作的作用域
  2. 原生app context 就是 appium 默认操作的作用域,而 webview 是一个独立的作用域,appium 可以切换到里面进行操作
  3. 和selenium 一样,iframe 是独立的一个作用域,所以要切换到 iframe,才能对iframe里面的元素进行操作

 

原生app控件的 context 名字是啥?

NATIVE_APP

 

webview 控件的context 名字是啥?

  • 前缀:WEBVIEW_
  • 后面跟当前 app 的 package名字
  • 结合起来:WEBVIEW_package名字

 

这里提供一个有 webview 的 app

链接:https://pan.baidu.com/s/1CsXz0JbaDIoAMVBOFvorcg 

提取码:a9lc

 

完整 webview 测试代码

根据上面说的伪代码去理解这段完整的代码哦

from appium import webdriver
caps = {
    "platformName": "Android",
    "platformVersion": "9",
    "deviceName": "test",
    'appActivity': '.MainActivity',
    'appPackage': 'com.example.jcy.wvtest',
    # 设置命令超时时间
    'newCommandTimeout': 6000,
    # 确保自动化之后不重置app
    'noReset': True,
    # 底层驱动
    'automationName': 'UiAutomator2',
    # 查看webviwe版本方式2:通过代码的报错来查看
    # 指定chromedriver路径 需要自己改成自己的
    'chromedriverExecutableDir': r'C:\Users\user\Desktop\py\sq_appium\d5'
    # chromedriver版本匹配地址
    # https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', caps)
# 查看当前app的context(appium操作的作用域)
# context-NATIVE_APP的时候-只能操作原生控件
# context-WEBVIEW_包名,只能操作web元素
# 查看context的名称
print(driver.contexts)
# 当前处于哪个context?
print(driver.current_context)
# 如何切换context
driver.switch_to.context('WEBVIEW_com.example.jcy.wvtest')
# 打印切换后的context
print(driver.current_context)
# 访问百度页面
driver.get('http://baidu.com')
driver.find_element_by_id('index-kw').send_keys('渣油\n')
# 操作原生控件
driver.switch_to.context('NATIVE_APP')
print(driver.current_context)
# 点击通知
driver.find_element_by_accessibility_id('通知').click()
input()
driver.quit()
# app的类型
# 原生_app
# 混合app
# web_app


webview 自动化测试的总结


  • 只有开启 debug 模式的 app 才能自动化 webview 的内容
  • 自动化 webview 界面内容需要指定匹配 webview 版本的驱动

 

相关文章
|
设计模式 前端开发 测试技术
告别脆弱:构建稳定UI自动化测试的3个核心策略
告别脆弱:构建稳定UI自动化测试的3个核心策略
1021 113
|
存储 关系型数据库 测试技术
玩转n8n测试自动化:核心节点详解与测试实战指南
n8n中节点是自动化测试的核心,涵盖触发器、数据操作、逻辑控制和工具节点。通过组合节点,测试工程师可构建高效、智能的测试流程,提升测试自动化能力。
|
XML jenkins 机器人
JMeter+Ant+Jenkins实现接口自动化测试持续集成
本文介绍了如何使用Ant生成JMeter接口测试报告,并集成到Jenkins中实现自动化测试。内容涵盖Ant与JMeter环境配置、build.xml文件设置、测试执行及报告生成,同时包括Jenkins插件安装、项目配置和钉钉消息通知的集成,帮助实现持续测试与结果可视化。
1488 0
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
1036 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
人工智能 前端开发 测试技术
如何让AI帮你做前端自动化测试?我们这样落地了
本文介绍了一个基于AI的UI自动化测试框架在专有云质量保障中的工程化实践。
5067 24
如何让AI帮你做前端自动化测试?我们这样落地了
|
自然语言处理 前端开发 测试技术
使用 Playwright MCP 实现 UI 自动化测试
本文介绍如何结合Playwright与MCP协议实现智能化UI自动化测试。通过自然语言指令控制浏览器,降低技术门槛,提升效率,并涵盖环境搭建、核心功能、实战案例及最佳实践,展现对话式自动化的未来趋势。
|
Web App开发 开发框架 .NET
Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行
Pytest 与 Playwright 集成可提升自动化测试效率,支持参数化测试、多浏览器并行执行及统一报告生成。通过数据驱动、Fixture 管理和并行优化,显著增强测试覆盖率与执行速度,适用于复杂 Web 应用测试场景。
|
人工智能 IDE 测试技术
Browser-Use在UI自动化测试中的应用
Browser-Use是一款浏览器自动化工具,具备视觉与HTML解析、多标签管理、操作记录与复现、自定义操作、自我纠正及并行执行等功能,助力AI智能体高效完成网页任务。
1664 0
|
测试技术 API C++
Playwright 自动化测试系列(7)| 第三阶段:测试框架集成​​Page Object 模式
本课程详解Playwright测试框架中的Page Object模式,通过电商登录-下单实战演示PO架构设计与高级技巧,结合Pytest实现多用户测试。重点解析PO模式提升代码复用性、降低维护成本的核心价值,并提供常见问题解决方案,助力构建高可维护性的自动化测试体系。