Appium元素定位难点:混合式的native+webview
现在大部分app都是混合式的native+webview,对应native上的元素通过uiautomatorviewer很容易定位到,webview上的元素就无法识别了。
1.认识识webview
>用uiautomatorviewer定位工具查看app页面,发现页面上有些区域无法定位到,如下图左边红色区域,只能定位到这个大框框,红色框里面的元素是无法识别的。
>这时候可以查看元素属性,如右图它的class属性,上面写着WebView,那毫无疑问这种页面就是webview了。
2.、接触contexts
>.context的中文翻译是上下文环境,学过selenium的同学,也可以理解为句柄(handle),其实是一回事,反正知道是两个不同的环境就行了。
>.先获取页面是contexts环境,如下图红色区域,获取的是一个list列表:
NATIVE_APP:这个就是native,也就是原生的
WEBVIEW_com.xxxx :这个就是webview
>.当看到打印出来有下图两个,就说明获取到webview的context了(当然也有的app有坑,可能明明有webview,却通过contexts获取不到,这种需要特殊处理了)

3.换到webview
>要想操作webview上的元素,第一步需要切换环境(跟selenium的切换iframe,切换handle思路是一样)
>切换方法:switch_to.context(参数是webview的context)
>由于第二步已经获取到contexts是一个list对象,取这个list的第二个参数就行,也就是contexts[1]

4.切回native
>webview上操作完后,想回到native上操作,这时候需要先切回来,切回native有两个方法:
方法1:driver.switch_to.context("NATIVE_APP") # 这个NATIVE_APP是固定的参数
方法2:driver.switch_to.context(contexts[0]) # 从contexts里取第一个参数

Appium元素定位难点:混合式的native+webview的更多相关文章
- Appium元素定位难点:tap坐标定位不准确
tap用法 1.tap是模拟手指点击页面上元素语法有两个参数,第一个是positions,是list类型最多五个点,duration是持续时间,单位毫秒 tap(self, positions, du ...
- Python Appium 元素定位方法简单介绍
Python Appium 元素定位 常用的八种定位方法(与selenium通用) # id定位 driver.find_element_by_id() # name定位 driver.find_ ...
- 4、通过uiautomatorviewer实现appium元素定位
熟悉selenium自动化的小伙伴应该知道WebDriver 提供了八种元素定位方法: idnameclass nametag namelink textpartial link textxpathc ...
- appium元素定位总结
appium元素定位方法总结 使用uiautomator定位 driver.find_element_by_android_uiautomator(uia_string) 根据resourceId属性 ...
- appium元素定位工具
appium元素定位工具介绍 使用uiautomatorviewer定位工具 使用Appium Inspector定位工具 使用uiautomatorviewer定位工具 谷歌在Android S ...
- APP 自动化之appium元素定位(三)
APP自动化测试关键环节--元素定位,以下我们来了解appium提供的元素定位方法! 1. id定位,id一个控件的唯一标识,由开发人员在项目中指定,如果一个元素有对应的resource-id,我们就 ...
- appium 元素定位与操作:
一.常用识别元素的工具 uiautomator:Android SDK自带的一个工具,在tools目录下 monitor:Android SDK自带的一个工具,在tools目录下 Appium I ...
- appium===元素定位
一.常用识别元素的工具 uiautomator:Android SDK自带的一个工具,在tools目录下 monitor:Android SDK自带的一个工具,在tools目录下 Appium Ins ...
- Appium元素定位
一.定位工具(UIAutomator) 运行系统条件: 1)Android Studio 2)系统版本:sdk 要求api18以及以上 打开:Android SDK ---Too ...
随机推荐
- C#锐利体验2读书笔记
匿名方法,迭代,匿名方法允许我们以一种“内联”的方法来编写方法代码;匿名方法是直接与委托实例化相关联的,使委托实例化更加直观方便.匿名方法的几个相关问题--参数列表,--返回值,--外部变量. add ...
- 如何让VS像CB一样使用
之前用VS,先是完成了GLUT库下的opengl使用: 然后得知GLUT有些过时,又按照教程接触了GLFW库下,反正对我来说是有些复杂. 今天正式试一试用VS来写ACM的题目,发现不能定义string ...
- forever nodejs管理进程
何为forever forever可以看做是一个nodejs的守护进程,能够启动,停止,重启我们的app应用.官方的说明是说: A simple CLI tool for ensuring that ...
- Oracle iops测试
DECLARE lat INTEGER; iops INTEGER; mbps INTEGER;BEGIN DBMS_RESOURCE_MANAGER.CALIBRATE_IO(4, 10, ...
- 深入解析pure virtual function call
在本文中,我们将不解释为什么会提示“纯虚拟函数调用”和如何提示“纯虚拟函数调用”,而是详细解释在win32平台的构造函数/析构函数中直接/间接调用纯虚拟函数时程序本身.在开始时,将显示一个经典示例,在 ...
- 15-ESP8266 SDK开发基础入门篇--上位机串口控制 Wi-Fi输出PWM的占空比,调节LED亮度,上位机程序编写
https://www.cnblogs.com/yangfengwu/p/11104167.html 先说一下整体思路哈.. 咱滑动的时候 会进入这个,然后咱呢不直接从这个里面写发送 因为这样的话太快 ...
- 【数据结构】Java版
有趣有内涵的文章第一时间送达! 喝酒I创作I分享 生活中总有些东西值得分享 @醉翁猫咪 想你吴亦凡;赵丽颖 - 想你 你是程序猿对吗?会写代码的那种? 我是打字猿?会打代码的那种? 现在告诉大家一个很 ...
- 照片放大功能h5
这里就不放图了,放大的是别人的身份证 <template> <div class="image-cell__wrapper" :style="borde ...
- mysql 存储过程 动态表名
今天写存储过程时,遇到要将表名最为参数的问题,如果不涉及到游标的话,使用prepare可以解决问题,但是,动态表名要运用在游标中的话,则prepare就得靠边站了. 集众人之智慧,最后,使用临时表解决 ...
- 带状矩阵的存储(c++)
2 1 0 0 3 1 3 0 0 5 2 7 0 0 9 0 这个程序对于三对角矩阵都是有效的,为了精 ...