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

时间: 2024-10-10 22:36:59

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

移动端自动化==&gt;Appium定位方式总结

1.ID Android Android的resource-id对应ID定位方式,可以通过index来获取需要的元素(从0开始查找dom树中的同名resource-id属性).使用appium-desktop来获取元素时,id和resource-id是相同的,如果只有resource-id,可能存在重复现象,如果提示有id的定位方式,则可以只接获取,代表唯一. driver.find_element_by_id('com.tencent.mobileqq:id/btn_login') 2.Acc

Appium移动端自动化:元素定位方式总结

ClassName Android:Android的class属性对应ClassName定位方式,ClassName一般都是会重复的,可以通过index来获取需要的元素.(从0开始查找dom树中的同名class属性) iOS:iOS的type属性对应CLassName定位方式,ClassName一般都是会重复的,可以通过index来获取需要的元素.(从0开始查找dom树中的同名class属性) # 通过class_name定位,取class内容: driver.find_element_by_c

六 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 定位方式

1.定位元素应用元素   1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement element = driver.findElement(By.id("com.tencent.mm:id/do")); 或者: driver.findElementById("com.tencent.mm:id/do") 下面的例子展示的是通过id定位到元素并点击: @Test public void doClick

APPIUM Android 定位方式

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

如何在Appium中使用AI定位

当我们在写自动化测试脚本的时候,传统情况下一定要知道元素的属性,如id.name.class等.那么通过AI的方式定位元素可能就不需要知道元素的属性,评价人对元素的判断来定位,比如,看到一个搜索框,直接使用ai:search来定位, 或者我想定位一个关闭按钮,之直接使用 ai:close,我们并不需要知道这搜索框和关闭按钮的属性. appium 通过插件的方式可以支持AI定位.为体验一个这种定位方式我花了两周时间. 系统要求 首先,需要一些系统依赖项来处理图像. macOS brew insta

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

Appium - iOS 各种问题汇总

作者: Max.Bai 时间: 2014/10 Appium - iOS 各种问题汇总  1. Appium 滑动: swipe 有三种方式: 第一种:swipe JavascriptExecutor js = (JavascriptExecutor) driver; HashMap<String, Double> swipeObject = new HashMap<String, Double>(); swipeObject.put("startX", sta

Appium+python (3) 元素定位(1)

打开问价夹下面的uiautomatorviewer: 夜神模拟器里的App后,回到uiautomatorviewer: 点击左上角的Device Screenshot,这时你的夜神模拟器页面就会显示在这里,右侧就是对应的定位信息了,我们主要依靠右下角的Node Detail信息进行定位. 如果你有selenium的基础,那接下来介绍的基本一致,只是换了个方法而已: text find_element_by_name(u"视频") id find_element_by_resource-