Appium元素定位和UiAutomator表达式
目录
一、常见属性的用法1。怎么用resourceid?2。其它属性
二、通过截图就可以看到元素的属性,那怎么元素定位呢?1。appiumapp页面元素定位2。UiAutomator的表达式3。什么时候用UiAutomator呢?4。和Web自动化的定位有啥区别?
三、问题1。元素与属性的区别?2。app一进模拟器就崩溃3。如果遇到点击uiautomatorviewer就闪退一、常见属性的用法
xpath相对定位:如果相对定位中这个元素是有id的,这个id是唯一的,xpath定位中优先通过id来定位。
class属性对应的值是元素类型(是一个文本视图工具),Web自动化中元素类型代表Input、image、button这样的标签名。1。怎么用resourceid?
resourceid是唯一的,但是在App页面中并不绝对唯一。大部分情况下是唯一的,小部分情况下是重复的。
如果一个页面中,元素的样式非常像,那很有可能它们的id就是一样的。UIAutomatorViewer这个自带的工具是不能看出这个id是不是绝对唯一的。
假设resourceid是唯一的,用相对定位这样定位:
和Web自动化一样的玩法:元素类型〔属性名称属性值〕
这里的class不是Web网页中的class属性了,这里代表它的标签名和元素类型(它是一个图片、一个文字、链接还是一个按钮呢?学会区分)。
如果resourceid不是唯一的,那么上面那个表达式是不够的,还会追加到上层的Linearlayout、RelativeLayout、包括祖先里面的一些层级都会放进来。
如果没有安装升级uiaumatorview添加元素定位就只能靠自己来判断。看下其它和它长得很像、元素的格式、风格、样式、页面布局都和它一模一样的元素,看下各位的id是否全都是一样的。
如果用了升级uiaumatorview添加元素定位,可以根据它的表达式自己来判断。
任何一个元素一定会有个class,因为它是一个类别。Linearlayout是一样的,布局也是安卓的控件,所以也会有控件名称、控件类型。
以下这些东西只有2个值,False和True。
2。其它属性
以上这些属性在很多情况下是没有用的,但是在关键的时刻是很有用的。
例如想筛选当前页面中可以滚动的元素,通过scrollable等于True来过滤。二、通过截图就可以看到元素的属性,那怎么元素定位呢?
和Web自动化一样的,都是通过元素属性来定位,而且比Web自动化简单。
App中只支持5种元素定位方式。虽然继承了Web自动化的元素定位,它之所以继承呢,是用到了其中的一个部分。1。appiumapp页面元素定位
1、通过id定位元素:resrouceid
2、通过ClassName定位:classname
3、通过AccessibilityId定位:contentdesc
4、通过AndroidUiAutomator定位
5、通过xpath定位与Web自动化通用的是3种:
1、通过id定位元素:resrouceid
2、通过ClassName定位:classname
3、通过xpath定位1。1通过id定位元素:resrouceididdriver。findelementbyid(保密)
有findelementbyid()就有findelementsbyid()
可以找到多个,它的返回值一样是列表。它的返回对象一样是Webelement。源码:
在它的下面有个findelementbyid()。它的方法和Web自动化是一样的。1。2第二种定位方式ClassName,ClassName就是这里的class属性。
虽然这里代表的是元素类型,但它同样是class属性。所以用这种方法就是这样写:classdriver。findelementbyclassname(保密)
这里有点区别,但是方法名还是没有区别的。这个class的属性其实没有多大用处,一个页面中肯定很多属性的值和它很像的。所以这种用法不多。
既然是类别,图片可能有好多种,输入框也有好多种,它代表的是一种元素的类型。
Web自动化中xpath定位是最常用的,但是App自动化中xpath是最不想用的。原因是它的效率太低了。
如果全部只用xpath定位,问题会比较大,能不用xpath就不用xpath。1。3通过AccessibilityId定位
AccessibilityId是移动端特有的定位方式。fromappium。webdriver。common。mobilebyimportMobileBy
这是之前看到的类,这个类当中除了继承了Web自动化之外,对于安卓有2种,其中一种是ACCESSIBILITYID。源码如下:
如果通过这种方式定位,对应的方式就是:contentdescdriver。findelementbyaccessibilityid()
此处应输入contentdesc的值,但是这里是空的,所以不能通过它定位。
但是findelementbyaccessibilityid()是另外一种id,代表它在当前这个页面中也是很独特的。只要它有值,基本上可以通过它来定位。1。4通过AndroidUiAutomator定位
用的是安卓UiAutomator这个自动化框架中提供的元素定位方式。所以想用这种元素定位方式,就必须了解它到底是怎么做的。
UiAutomator自动化库是Java语言写的,所以它的参数是Java代码。UiAutomator自动化库提供了text。而元素有文本内容就可以通过文本内容来定位。
这个里面的参数就必须是UiAutomator当中提供的定位方式。UiAutomator是Java实现的,那么它的定位类型肯定也是Java实现的。这个是谷歌开发中心的网址,有对UiAutomator的介绍:
https:developer。android。comtrainingtestinguiautomator。htmluiautomatorviewer
UiAutomator去定位元素的时候用的UiSelector类。Api的官方文档:
Appium中通过driver。findelement来找元素的,找到的结果对象是一个WebEmemt。
但是括号里面,不同的定位类型你要输入不同的定位表达式。UiSelector是个Java类,主要用来做元素定位表达式。什么来代表UiSelector中的WebEmemt呢?
通过UiSelector找到元素,这是表达式。总有一个方法通过它来找吧?
那就是UiObject。UiObject对应到WebEmemt。WebEmemt有对元素的各种操作以及属性的获取。UiObject就是WebEmemt,有各种对元素的操作。UiObject就可以获取这么多的属性:
通过UiObject对元素进行输入、点击等操作。
UiAutomator是它自己的框架,所以对应的做了一套东西。UiSelector这个类是用来表达元素定位的。UiAutomator这里的参数就是UiSelector类定位表达式。
Publicconstructors公共的构造函数,构造函数就是初始化函数。类初始化的时候,有时候init是有参数的,构建函数当中就告诉了你它有没有参数。
初始化的表达式:
UiSelector()
Java中这样写:
newuiUiSelector()这就是代表类的实例化。
python中这样写:
uiUiSelector()
简写的做法:
newUiSelector()
有的时候并不用一个变量去接收它。在Web自动化当中,直接实例名称。方法就可以了。
在Java中不需要用一个变量去接收实例化对象,那就直接这样写newUiSelector()。后面调它的各种方法。Java中每一个变量必须声明变量类型,它是个布尔值,是个类还是什么。
事实上只有一个变量,叫做val。
在这个地方,类也算一种数据类型。在Python中,类也算一种数据类型,是你自己构造的这种数据类型,只不过不需要声明而已。
清一色的返回值基本都是类本身。
如果是一个实例化对象,那它的返回值都是实例化对象。每一个实例化对象都可以有这么多方法。
。checkable(true)返回值就是newUiSelector()。接下来可以通过别的方式组合起来。
多种条件组合起来对元素进行定位。有些元素的id不是唯一的,但是文本是唯一的。可以纯粹通过文本,也可以id和文本一起定位。resourceId有2种方式:
人家这里是字符串,在Java中单引号和双引号是有区别的。如果在Java中是字符串,只能用双引号,不然就是报错。
newUiSelector()。checkable(true)。resourceId(保密)
通过2个属性来定位的,一个是checkable()。
一个是resourceId()。两者都要满足才能符合我的定位表达。
匹配到正则表达式的元素也可以。text提供了4种定位方式:
第一种:全局匹配(完全文本匹配)。
newUiSelector()。checkable(true)。resourceId(保密)。text(我的)
第二种:包含。
第三种:正则表达式的匹配。
textstartswith:以什么开头的一个字符串。
如果你的文本很长,可以定义以什么开头,也可以实现部分匹配。只不过这个部分匹配是有要求的,必须以什么开头。
这4种方式都可以用的,参数全是字符串。
除了text是文本性质的,contentdesc也是文本性质的。contentdesc也提供了4种定位方式:
className:匹配一个控件的类型。
控件类型也属于控件的属性。大家都叫做控件,但是你叫这个名字,我叫那个名字。
每个元素的package都是一样的,所以package没多大用处。
scrollable:除了UiAutomator可以提供到位,xpath也可以做到但是有所欠缺。
UiAutomator自动化库提供了各种属性。只要学会表达式,然后能自己判断用什么样的类型来定位就好了。2。UiAutomator的表达式
使用UiAutomator中的UiSelector类来处理元素定位。
newUiSelector()。函数名称(定位表达式)
字符串是双引号,布尔值就不是双引号了。driver。findelementbyandroiduiautomator(newUiSelector()。resourceId(保密)。text(我的))这种用法,外面只能用单引号或者里面的双引号打个斜杠标明下
实际上只通过text定位就可以了。除了它叫做我的,这个页面也没有别人叫做我的了。所以改成这样:UiAutomatordriver。findelementbyandroiduiautomator(newUiSelector()。text(我的))这种用法,外面只能用单引号或者里面的双引号打个斜杠标明下3。什么时候用UiAutomator呢?
如果通过id定位、ClassName定位、AccessibilityId定位这前3种方式都没有让你唯一定位到元素,那就用第4种呀!
第4种其实效率很高的,因为是人家框架自己的定位方式呀,都不需要转换。第5种xpath定位,写法其实和Web自动化的xpath定位的写法一样。xpath能干的事,第4种方式就能全部搞定了。
以上5种都搞不定的情况下,就需要用坐标了。但是坐标不太稳定,除非实在没有办法了才用坐标,坐标比xpath还差劲。
一般的app都有id,如果你测得app没有id,那就去给开发提意见,把id加上。4。和Web自动化的定位有啥区别?
app自动化相对来说比较简单。如果把uiaumatorview升级版装上了,所有的定位表达式就直接拷贝就好了。
不需要调试也不需要考虑上下级关系,如果是比较规范的app,通过id来定位就可以了。
和Web自动化的写法一样。4大属性都一样(点击、输入、获取元素的文本内容、获取元素的属性)。函数名称一样,操作方式也一样。需要等待,等待方法也和Web自动化一样。三、问题1。元素与属性的区别?元素:
一对(或一个)标签包含的范围:其实可以理解为元素为一个容器,而这容器里面包含了标签。
这里的一对标签:就是开始和结束标签。
范围:就是从开始标签到结束标签
薄荷之夏正式杀青高颜阵容诠释小镇青春群像日常薄荷之夏,愿与你再次相逢。近日,由上海爱美影视文化传媒有限公司出品,西安曲江影视投资(集团)有限公司、三福互娱(北京)文化有限公司、西安电视剧版权交易中心有限公司联合出品,新锐……
魏哲鸣我有特殊沟通技巧开播角色反转魅力引期待今日,由张弛执导,魏哲鸣、范世琦、罗予彤等主演的现实主义公安题材精品剧《我有特殊沟通技巧》将正式开播。魏哲鸣在剧中饰演亦正亦邪的科学狂人,脑科医生许哲。该剧讲述了南星市公……
比亚迪宋PLUSDMi四驱版参数曝光比亚迪宋PLUSDMi四驱版参数曝光,售价17。58万?比亚迪日前对外宣布,将于9月30日推出搭载超级智能电四驱的宋PLUSDMiAWD(四驱)车型。据了解,新车将采用D……
韩沐伯出演的棋魂榴莲式真香了由爱奇艺出品,厚海文化、小糖人传媒联合出品、小糖人传媒承制,戴莹、朱振华、赵文竹担任总制片人,刘畅导演执导,胡先煦、张超、郝富申、韩沐伯、赵浩闳等主演的少年热血棋幻网剧《棋魂》……
FPS,永远的绞肉机品类总有这么一个品类大家打的热火朝天,前赴后继在Epic与苹果的大战中,游戏价值论分析了其以牺牲《堡垒之夜》移动端的潜力来迎战的做法。今年4月,EA宣布公司旗下DICE与In……
瞄准大结局高潮不断浙江卫视新剧石头开花再玩新花样由五百、别克执导,由黄轩、陈赫等主演的电视剧《瞄准》,通过跌宕起伏的剧情牵动着不少观众的心,相关的话题讨论也不断飙涨。尤其是在收官之际高潮不断,反转接连出现。作为浙江卫视美好时……
唐旭最好的时代开播蔡永强化身工程师筑梦中国高铁星关系讯工业题材青春励志剧电视剧《最好的时代》日前于湖南卫视正式播出。《最好的时代》以中国高铁人的励志成长为主线,以高铁机车为背景,用独特视角讲述了中国铁路新一代青年工程师在老……
付美瞄准圆满收官走心演绎女杀手获观众喜爱近日,由付美搭档黄轩、陈赫、杨采钰、李溪芮主演的电视剧《瞄准》迎来收官。该剧自开播以来,收视率、播放量以及微博话题度一直位居前列,其中付美饰演的单棱一角酷飒狠辣,其对师傅的忠心……
卢杉燕云台粉丝见面会被催离婚乌骨里亲情爱情陷两难11月15日,古装传奇剧《燕云台》在上海举行了粉丝见面会,唐嫣、窦骁、佘诗曼、卢杉等主演以燕云姐夫团和姐妹团的形式出席了此次活动。活动期间,惊喜不断,萧乌骨里的饰演者卢杉被粉丝……
蹭热度?苹果发布iPhone13,大宇推出大宇彩虹杯这几天一直关注苹果新品发布会,新的iPhone着实惊艳了不少网友。虽然很喜欢苹果的hiPhone13,但不是在必须要换机的时刻真的不敢乱花钱呀。没想到略过iPhone13转头却……
2020年首部港式警匪片无间行者之生死潜行曝风云对决版海报由钟少雄监制,黄家辉执导,谢天华、周柏豪、吕良伟领衔主演,梁竞徽、陈启泰、许绍雄、吴毅将等一众TVB金牌港星联袂出演的2020年首部港式警匪片《无间行者之生死潜行》将于11月2……
OPPOACE2发布,游戏手机就不需要摄像头了?4月13日,OPPO在线上举办了新品发布会,发布了预热已久的Ace2。外观屏幕估计是怕影响FindX2系列的销量,所以这次的Ace2屏幕其实是比较平庸的。采用了一块……
好价大碗,诚意满满中兴Axon30Ultra一、前言2021年的上半年依旧热闹,各大手机品牌商也是纷纷发布了各家的旗舰手机。如果留心观察,不难发现各家旗舰这两年的发展和堆料,主要都来自于手机屏幕和相机组性能。……
放弃苹果买这3款,只因性能太强,价格还低,买错实在可惜众所周知,如果选一款手机来代表高端序列,毫无疑问,是iPhone手机,凭借着过硬的实力,硬生生只靠高端旗舰机就能在日趋激烈的竞争环境下取得前三的成绩,但是吧,iPhone手机也……
工信部部长苗圩要在年底之前,实现所有用户自由携号转网2019年3月5日,2019年全国两会第二场部长通道于十三届全国人大二次会议开幕会结束后正式开启。工信部部长苗圩。东方IC图3月5日上午9时,第十三届全国人民代表大会第二……
黑客是怎么攻击网站的,管理员必知网站属于web应用,要攻击网站,可以先通过大量的信息收集工作来筛选出有用的信息,并在这些信息的基础上思考网站是否存在漏洞,利用这些漏洞来进行渗透工作。如盲注、SQL注入、LFI……
天玑9000芯片到底是不是华为的麒麟芯片改名的?我看有些人是魔怔了,居然会有天玑9000是华为麒麟芯片改名的想法,当然有些人估计是觉得天玑9000如果到时候表现好,那就是华为出手的缘故,然后又可以沸腾一番,可是这是不可能的,……
币圈内战拉响比特币大战狗狗币,谁会笑到最后?在狗狗币、Shib币、乌龟币等各种动物币日日霸占着各大媒体头条和热搜榜,吸走了大量的关注度和资金之后,老币圈人们愤怒了。从2009年比特币正式诞生起,一些最早关注数字货币……
5G到底会带来什么改变?在今年4月19日举行的国务院政策例行吹风会上,工信部副部长刘烈宏表示,目前中国已建成全球最大规模的5G移动网络,5G套餐用户已超2。6亿。但是,我们好像感受不到5G存在的……
14710台!ARM服务器走进中国移动大网基于ARM平台的服务器,到底行不行?中国移动给出了明确、有力的回答!近日,中国移动发布集中网络云资源池三期工程计算型服务器采购招标公告。该项目采购计算型服务器43564台……
国家的功臣和罪人华为,依靠超前的市场感知,依靠对技术的钻研和创新,依靠一切都是为了祖国不被西方卡脖子,为了民族更加强大的信念;先后在服务器、5G通信技术、芯片设计、鸿蒙操作系统及软件生态等获得……
匈牙利将建欧洲首个5G智慧铁路港新华社布达佩斯10月5日电(记者袁亮)中国华为匈牙利子公司日前与匈牙利东西联运物流公司及英国电信运营商沃达丰匈牙利公司签署了建设东西门场站的合作协议。该项目将建设欧洲首个使用5……
整个中国都在等你回家,没有任何力量能阻挡你回归的步伐9月25日26日这两天,有一件值得纪念的重要事件,整个中国都在欢迎一位中国公民孟晚舟回家。从25日一大早,整个网络空间都是孟晚舟即将回到祖国的消息,各大媒体都在跟踪关注全……
微信正式推出关怀模式!微信近日发出新版本,正式推出了关怀模式。相比正常模式,微信关怀模式文字更大更清晰,色彩更强更好认,按钮更大更易用,有助于提升老年人、视障群体等人群使用微信的便利性。微信关……