Appium之主要的元素定位疑点难点

简介: 参考资料:Mushishi_xu - 博客园 http://www.cnblogs.com/Mushishi_xu/default.html?page=2前言测试APP时,有时候会遇到上下左右滑动的界面、遇到native 和 webview 切换的界面、弹框界面、元素坐标定位等等情况。

参考资料:Mushishi_xu - 博客园 http://www.cnblogs.com/Mushishi_xu/default.html?page=2

前言

测试APP时,有时候会遇到上下左右滑动的界面、遇到native 和 webview 切换的界面、弹框界面、元素坐标定位等等情况。下面将分别对这几个难点做主要解析:

一、滑动界面的元素定位

1.查看APPIUM API源码语法,起点和终点四个坐标参数,duration是滑动屏幕持续的时间,时间越短速度越快。默认为None可不填,一般设置500-1000毫秒比较合适。

swipe(self, start_x, start_y, end_x, end_y, duration=None)

    Swipe from one point to another point, for an optional duration.

    从一个点滑动到另外一个点,duration是持续时间

    :Args:    - start_x - 开始滑动的x坐标

    - start_y - 开始滑动的y坐标

    - end_x - 结束点x坐标

    - end_y - 结束点y坐标

    - duration - 持续时间,单位毫秒

    :Usage:    driver.swipe(100, 100, 100, 400)

2.手机从左上角开始为0,横着的是x轴,竖着的是y轴

img_d345191b972773f659e3fb162d4f7a77.png
X、Y轴

3.由于不同手机屏幕的分辨率不一样,所以同一个元素在不同手机上的坐标也是不一样的,滑动的时候坐标不能写死了。可以先获取屏幕的宽和高,再通过比例去计算

img_a1e5fe8f511da299a5a322e8aff0f4ec.png
获取屏幕宽度和高度

4.为了后续方便调用滑动封装函数,下面示例代码就把滑动进行封装

>swipe函数参数说明:

参数1:driver设备

参数2:t是持续时间

参数3:n滑动次数

img_6f58838b1be57b975f96b5dd40a8efa6.png
滑动封装函数

二、native与webview的切换

现在大部分app都是混合式的native+webview,对应native上的元素通过uiautomatorviewer很容易定位到,webview上的元素就无法识别了。

1.认识识webview

>用uiautomatorviewer定位工具查看app页面,发现页面上有些区域无法定位到,如下图左边红色区域,只能定位到这个大框框,红色框里面的元素是无法识别的。

>这时候可以查看元素属性,如右图它的class属性,上面写着WebView,那毫无疑问这种页面就是webview了。

img_90db7f2fb746f74f5543a3b083a07fed.png
webview页面

2.、接触contexts

>.context的中文翻译是上下文环境,学过selenium的同学,也可以理解为句柄(handle),其实是一回事,反正知道是两个不同的环境就行了。

>.先获取页面是contexts环境,如下图红色区域,获取的是一个list列表:

NATIVE_APP:这个就是native,也就是原生的

WEBVIEW_com.xxxx :这个就是webview

>.当看到打印出来有下图两个,就说明获取到webview的context了(当然也有的app有坑,可能明明有webview,却通过contexts获取不到,这种需要特殊处理了)

img_714433ae9d0125b35cb966f5cc4ea2a5.png
获取webview的context

3.换到webview

>要想操作webview上的元素,第一步需要切换环境(跟selenium的切换iframe,切换handle思路是一样)

>切换方法:switch_to.context(参数是webview的context)

>由于第二步已经获取到contexts是一个list对象,取这个list的第二个参数就行,也就是contexts[1]

img_3df04e49c35bf6d9591612c08399000a.png
换到webview页面

4.切回native

>webview上操作完后,想回到native上操作,这时候需要先切回来,切回native有两个方法:

方法1:driver.switch_to.context("NATIVE_APP")   # 这个NATIVE_APP是固定的参数

方法2:driver.switch_to.context(contexts[0])      # 从contexts里取第一个参数

img_dbeb90f693f60f2a31058621e1ec4a38.png
切回native页面

5.示例代码

img_aacb3f4db324755ff91ae9e7cac6f5bd.png
示例代码

三、弹框界面的定位

appium脚本在拿到大量安卓手机执行的时候,app在很多手机上会跳出请求权限的弹框,弹框无法点掉,导致脚本定位元素失败。APP里的弹框一般提示有两种,一种是弹出需要点击确定的提示框,这种直接获取元素定位即可;另一种是toast,安卓页面上弹出的提示框,这种提示框出现在屏幕上大概3秒左右就会消失。用uiautomatorviewer根本定位不到。查了下iOS端定位APP弹框资料,可以通过在 desirede_capabilities 设置 autoAcceptAlerts = true。Android端却找不到好版本定位,为此,特总结Android端APP弹框定位方法,如下:

1.切换成真机之后,用automatorviewer定位工具去定位(很多情况下真机环境比模拟环境定位要好)

2.系统弹框是返回的event是null,可以通过AccessibilityServer 获取到系统权限弹框的event 

3.可以尝试用 driver.switch_to_alert().text[0:] 语句定位    #会显示alert上的信息

img_5f53600337f143c704a2d55db9b0a9e1.png
弹框定位

相关资料:

1.弹窗处理

四、元素坐标定位

面试问题:有时候在定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?现在你就可以回答:定位元素所在位置的坐标即可

1.tap 是模拟手指点击,一般页面上元素的语法有两个参数,第一个是 positions,是 list 类型最多五个点,duration是持续时间,单位毫秒

tap(self, positions, duration=None):

Taps on an particular place with up to five fingers, holding for a certain time

模拟手指点击(最多五个手指),可设置按住时间长度(毫秒)

:Args:

- positions - list 类型,里面对象是元组,最多五个。如:[(100, 20),(100, 60)]

- duration - 持续时间,单位毫秒,如:500

:Usage:

driver.tap([(100, 20), (100, 60), (100, 100)], 500)

2.坐标定位方法

>如下图定位"去看看"这个按钮的坐标,可以看到右侧bonds属性:[374,831][654,906]

img_46f454db3b8ff128bc6c369d1bd13cd0.png
坐标定位

>点右上角"搜索"按钮,查看bonds属性:[615,52][690,146]

img_31d0d761b13df45eac2a7eb6b8d1b297.png
bonds属性

3.示例代码

img_e68972c7b36640f57daac02a0d9f7976.png
示例代码
目录
相关文章
|
2月前
|
XML Java 测试技术
『App自动化测试之Appium应用篇』| 元素定位工具Appium-Inspector从简介、安装、配置到使用的完整攻略
『App自动化测试之Appium应用篇』| 元素定位工具Appium-Inspector从简介、安装、配置到使用的完整攻略
371 3
|
2月前
|
XML 测试技术 开发工具
『App自动化测试之Appium应用篇』| 元素定位工具uiautomatorviewer从简介、特点、启动到使用的完整过程
『App自动化测试之Appium应用篇』| 元素定位工具uiautomatorviewer从简介、特点、启动到使用的完整过程
131 4
|
2月前
|
移动开发 安全 测试技术
『App自动化测试之Appium应用篇』| 继承于selenium常用的元素定位方法有哪些?如何使用?
『App自动化测试之Appium应用篇』| 继承于selenium常用的元素定位方法有哪些?如何使用?
122 0
|
11月前
|
Android开发
appium--元素定位
appium--元素定位
|
测试技术 Android开发 Python
|
XML 测试技术 API
App自动化测试|Appium元素定位工具
App自动化测试|Appium元素定位工具
339 0
App自动化测试|Appium元素定位工具
|
Java 测试技术 API
Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解
Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解
211 0
Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解
|
测试技术 Android开发
Appium自动化(9) - appium元素定位的快速入门
Appium自动化(9) - appium元素定位的快速入门
157 0
Appium自动化(9) - appium元素定位的快速入门
|
开发框架 测试技术 索引
Python+Appium自动化测试(5)-appium元素定位常用方法(二)
appium继承了selenium框架中webdriver提供的元素定位方法,接下介绍几种常用的方法。
Python+Appium自动化测试(5)-appium元素定位常用方法(二)
|
测试技术 开发工具 Android开发
Python+Appium自动化测试(5)-appium元素定位常用方法(一)
对于Android而言,查找appUI界面元素属性的工具有三种:appium desktop,uiautomatorviewer.bat,weditor。之前已经介绍过了weditor的使用,这里我将通过使用uiautomatorview工具查看元素的属性值,来介绍Android app通过appium进行元素定位常用的几种方法。
Python+Appium自动化测试(5)-appium元素定位常用方法(一)