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

前言

测试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轴

X、Y轴

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

获取屏幕宽度和高度

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

>swipe函数参数说明:

参数1:driver设备

参数2:t是持续时间

参数3:n滑动次数

滑动封装函数

二、native与webview的切换

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

1.认识识webview

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

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

webview页面

2.、接触contexts

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

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

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

WEBVIEW_com.xxxx :这个就是webview

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

获取webview的context

3.换到webview

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

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

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

换到webview页面

4.切回native

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

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

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

切回native页面

5.示例代码

示例代码

三、弹框界面的定位

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上的信息

弹框定位

相关资料:

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]

坐标定位

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

bonds属性

3.示例代码

示例代码

欢迎关注公众号

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容