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 版本的驱动

 

相关文章
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
1215 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
敏捷开发 Java 测试技术
探索自动化测试的奥秘:从Selenium到Appium
【9月更文挑战第14天】软件测试,这个看似枯燥乏味却至关重要的领域,正经历着一场革命。随着技术的进步,自动化测试工具如Selenium和Appium已成为质量保证的利器。本文将带你一探这些工具的神秘面纱,了解它们如何简化测试流程、提升效率,并确保软件产品的质量。准备好,我们将深入自动化测试的世界,解锁其背后的原理和实践技巧。
|
Java 测试技术 API
探索自动化测试的奥秘:从Selenium到Appium
【8月更文挑战第31天】本文旨在引导读者理解自动化测试的重要性,并逐步深入介绍如何利用Selenium和Appium这两个强大的工具来提升测试效率和质量。文章不仅分享理论知识,还通过具体代码示例,展示如何在Web应用和移动应用测试中实施自动化策略。
|
6月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
1040 62
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
7月前
|
运维 Linux 网络安全
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
226 4
|
9月前
|
运维 监控 安全
从实践到自动化:现代运维管理的转型与挑战
本文探讨了现代运维管理从传统人工模式向自动化转型的必要性与路径,分析了传统运维的痛点,如效率低、响应慢、依赖经验等问题,并介绍了自动化运维在提升效率、降低成本、增强系统稳定性与安全性方面的优势。结合技术工具与实践案例,文章展示了企业如何通过自动化实现运维升级,推动数字化转型,提升业务竞争力。
|
机器学习/深度学习 人工智能 运维
机器学习+自动化运维:让服务器自己修Bug,运维变轻松!
机器学习+自动化运维:让服务器自己修Bug,运维变轻松!
508 14
|
机器学习/深度学习 人工智能 运维
基于AI的自动化服务器管理:解锁运维的未来
基于AI的自动化服务器管理:解锁运维的未来
1098 0