Appium iOS万能的定位方式--Predicate(iOSNsPredicate)

所谓Predicate定位即Java-Client -5.0.版本以及Appium-Python-Client 0.31版本更新后增加的新的定位方式:

举个例子:

JAVA代码:

//输入账号和密码
driver.findElementByIosNsPredicate("value ==‘11‘").sendKeys("[email protected]");

driver.findElementByIosNsPredicate("name == ‘login_default_icon‘").click();

driver.findElementByIosNsPredicate("value ==‘请输入登录密码‘").sendKeys("1111");

driver.findElementByIosNsPredicate("name == ‘login_default_icon‘").click();

driver.findElement(By.id("登录")).click();

Python代码:

//输入账号和密码
driver.find_element_by_ios_predicate("value ==‘11‘").sendKeys("[email protected]");

driver.find_element_by_ios_predicate("name == ‘login_default_icon‘").click();

driver.find_element_by_ios_predicate("value ==‘请输入登录密码‘").sendKeys("1111");

driver.find_element_by_ios_predicate("name == ‘login_default_icon‘").click();

driver.find_element_by_id("登录")).click();

由于使用idclassNameAccessibilityId定位方式较为简单,多数情况下,在同一个页面,都不是唯一存在的,不能识别一个元素。而 xpath定位方式在 xcui 底层原生不支持,由 appium 额外支持的,定位速度很慢,而且有时候定位不到元素的情况存在。综上所述,在 iOS 的 UI 自动化中,使用原生支持的iOSNsPredicateString定位方式是最好,支持也是最好的。

定位方式

iOS 版本全支持,底层测试框架无论是 XCUITest 或 UIAutomation,可支持元素的单个属性和多个属性定位,推荐使用。一个元素有这些属性:typevaluenamelabelenabledvisible,有些元素的属性只有以上的部分属性,如下图所示,可根据这些属性进行元素定位。

元素属性的介绍

type:元素类型,与className作用一致,如:XCUIElementTypeStaticText

value: 一般不用

name:元素的文本内容,可用作 AccessibilityId定位方式,如:测试420班级群

label:绝大多数情况下,与 name 作用一致

enabled:元素是否可点击,一般值为true或者false

visible:元素是够可见,一般值为true或者false

定位方式

元素的定位方式都是一个属性+运算符+值形式存在

  1. 比较运算符:>,<,==,>=,<=,!=

    可用于数值和字符串的比较,

    如:name>100name == ‘测试‘

  2. 范围运算符:IN,BETWEEN

    可用于数值和字符串的范围核对

    如:name BETWEEN {3,10}name IN {‘Alan‘,‘May‘}

  3. 字符串相关:CONTAINSBEGINSWITHENDSWITH

    包含某个字符串,如:label CONTAINS ‘测试‘

    以某个字符串开头,如:label BEGINSWITH ‘420‘

    以某个字符串结束,如:label ENDSWITH ‘班级群‘

    PS:在三个关键字后加上[c]不区分大小写,可用于字母的校验;[d]不区分发音符号,即没有重音符号($、#、%等);[cd]即不区分大小写,也不区分发音符号,如:name CONTAINS[c] ABcdname CONTAINS abcdname CONTAINS ABCD是等同的,注意后面两个没带[c]的不相等

  4. 通配符:LIKE

    通配符也接受[cd]?代表一个字符,*代表多个字符

    如:一个元素的label属性为

    label LIKE ‘420测试班级群‘label LIKE ‘420测?班级群‘label LIKE ‘420??班级群‘label LIKE ‘42?测试班?群‘label LIKE ‘*试班级群‘label LIKE ‘420测试班*‘label LIKE ‘42*级群‘label LIKE ‘4*试*群‘

    以上这么多种文本都可以被识别为同一个元素。

  5. 正则表达式:MATCHES

    如:以4开头,以结束,

    label MATCHES ‘^4.+群$‘

    PS:具体正则表达式语法,请百度一下,你就知道

以一种属性定位元素

可以用元素的属性:typevaluenamelabelenabledvisible,进行定位:

type == XCUIElementTypeStaticText,label CONTAINS ‘测试‘label LIKE ‘*试班级群‘enabled == truevisible == false

以两种或两种以上属性定位元素

就是以上单个属性定位用符号AND连接起来即可。如:

type == XCUIElementTypeStaticText AND label CONTAINS ‘测试type == XCUIElementTypeStaticText AND label CONTAINS ‘测试‘ AND enabled == true

原文详见:https://testerhome.com/topics/9405

.blog-description { text-align: left; padding: 18px }
.blog-description::first-letter { font-size: 200%; font-weight: bold; float: left; margin-right: 3px }

原文地址:https://www.cnblogs.com/drewgg/p/10045641.html

时间: 11-29

Appium iOS万能的定位方式--Predicate(iOSNsPredicate)的相关文章

六 APPIUM Android 定位方式

文本转自:http://www.cnblogs.com/sundalian/p/5629500.html APPIUM Android 定位方式 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement element = driver.findElement(By.id("com.tencent.mm:id/do")); 或者: driver.findElementById("com.t

Appium学习路—Android定位元素与操作

一.常用识别元素的工具 uiautomator:Android SDK自带的一个工具,在tools目录下 monitor:Android SDK自带的一个工具,在tools目录下 Appium Inspector:Appium自带的一个功能,只有mac下可以使用该功能 下面是用monitor抓取到的页面元素 下面使用Appium Inspector定位的元素 二.元素定位   1.格式:find_element_by_定位方式(value) 通过id定位 (取resource-id的值): dr

新接触的多几种定位方式(相对定位、绝对定位、固定地位和浮动)

本周学习了页面布局相关的东西,网页 布局中,几种定位是我们经常用到的一个知识点,现在罗列一下目前接触到的剧中定位 方式以及其具体解释: 1.relative(相对定位) 在static的基础上,让一个元素在他本来的位置做一些位移,可以将该元素定位设置为relative,同时指定相对位移(利用top,bottom,left,right).有一点需要注意的是,相对定位的元素没有脱离文档流,仍然占据着他本来占据的位置空间. 2.absolute(绝对定位) 中将一个元素放至指定位置,可以使用absol

CSS的三种定位方式介绍(转载)

在CSS中一共有N种定位方式,其中,static ,relative,absolute三种方式是最基本最常用的三种定位方式.他们的基 本介绍如下. static默认定位方式relative相对定位,相对于原来的位置,但是原来的位置仍然保留absolute定位,相对于最近的非标准刘定位,原来的位置消失,被后边的位置所顶替 下面先演示相对定位的案例 [html] view plain copyprint? <!DOCTYPE html> <html> <head> <

iOS中的桥接方式

iOS中的桥接方式 C ->OC (__bridge tupe)expression  : 将CoreFoundation框架的对象所有权交给Foundation框架来使用,但是Foundation框架中的对象并不能管理该对象内存 (__bridge_transfer Objective-C type)expression : 将CoreFoundation框架的对象所有权交给Foundation来管理,如果Foundation中对象销毁,那么我们之前的对象(CoreFoundation)会一起

【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘

摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点.定位数据库可以不断完善不断补充,所以,越定位越准确.本文详细描述了,如果使用高德JS API来实现位置定位.城市定位的方法,包含了IP定位,浏览器定位,检索定位等多种网络定位方法.当然,如果您的手机有GPS功能,那么使用浏览器定位的时候,会自动获取GPS信息,使

iOS 自带定位功能

第一步:导入头文件 #import <CoreLocation/CoreLocation.h> #import <CoreLocation/CLLocationManagerDelegate.h> 第二步:设置代理 CLLocationManagerDelegate 第三步:创建一个属性 @property(nonatomic, strong) CLLocationManager *locationManager; 第四步:初始化     //定位服务管理对象初始化     _lo

selenlum笔记,(定位方式,搜索,cookie)

driver.get_cookies() 获得cookie信息add_cookie(cookie_dict)  向cookie添加会话信息delete_cookie(name)   删除特定(部分)的cookiedelete_all_cookies()    删除所有cookie driver.quit()退出关闭所有程序及窗口driver.close()关闭当前窗口 driver.get(url)print(driver.title)打印页面title driver.maximize_wind

android 三种定位方式

一共有三种定位方式,一种是GPS,一种是通过网络的方式,一种则是在基于基站的方式,但是,不管哪种方式,都需要开启网络或者GPS 首先添加权限 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 在C

OS开发UI篇—ios应用数据存储方式(归档)

OS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息) 归档:因为前两者都有一个致命的缺陷,只能存储常用的类型.归档可以实现把自定义的对象存放在文件中. 二.代码示例 1.文件结构 2.代码示例 YYViewController.m文件 1 // 2 // YYViewController.m 3 // 02