appium定位方法策略

官方地址
官方给的定位先后策略:
按其性能排序的可用位置策略列表(第一个是最快的)

  1. Class Name
  2. Accessibility Id
  3. Link Text
  4. Predicate
  5. Class Chain
  6. XPath

尽量尝试使用更接近此列表顶部的策略。XPath策略有时可能非常慢,因为XCTest本身不支持它,而WDA需要额外的努力才能实现它,这会严重影响查找时间。仅当没有其他替代方法时才使用XPath定位器,例如,如果查询中使用了某些特殊函数或轴。
当前搜索范围中的UI元素越多,您获得的查找时间就越长。默认情况下,搜索范围是整个页面的源(如表达式driver.findElement)。通过将其限制到特定元素的源(例如tableEl.findElement),可以适当地优化查找性能,尤其是如果要在同一根元素上执行多个查找。如果在有限范围内执行,此策略还可以帮助避免XPath定位器或改善它们的查找时间。

如果只有一个元素需要匹配,请不要搜索多个元素
dstElement = driver.findElements(By.xpath('//XCUIElementTypeTable'))[0] ->
dstElement = driver.findElement(By.className('XCUIElementTypeTable'))
通常findElements需要更多的时间来完成findElement,因为没有必要扫描整个源来查找所有匹配,而是在检测到第一个匹配后返回。

避免使用通用匹配器
By.xpath('//[@="1"]/parent::*') ->
By.xpath('//XCUIElementTypeButton[@name="1"]/parent::XCUIElementTypeCell')
像星号这样的通用匹配器*findElements调用相结合可能需要扫描每个UI元素的所有属性,从性能角度来看这是非常无效的。

1、iOSClassChain 用法:
(1)绝对路径
XCUIElementTypeWindow/XCUIElementTypeButton[3] - 选择第一个子窗口元素的第三个子按钮
XCUIElementTypeWindow - 选择所有儿童窗户
XCUIElementTypeWindow[2] - 选择层次结构中的第二个子窗口。索引从1开始
XCUIElementTypeWindow/XCUIElementTypeAny[3] - 选择第一个子窗口的第三个子节点(任何类型)
XCUIElementTypeWindow[2]/XCUIElementTypeAny - 选择第二个子窗口的所有子项
XCUIElementTypeWindow[2]/XCUIElementTypeAny[-2] - 选择第二个子窗口的倒数第二个子节点
可以使用'*'(星号)字符替换通用的'XCUIElementTypeAny'类名
XCUIElementTypeWindow[name CONTAINS[cd] "blabla"] - 选择所有窗口,其中name属性以“blabla”或“BlAbla”开头
XCUIElementTypeWindow[label BEGINSWITH "blabla"][-1] - 选择最后一个窗口,标签文本以“blabla”开头
XCUIElementTypeWindow/XCUIElementTypeAny[value == "bla1" OR label == "bla2"] - 选择第一个窗口的所有子项,其中值为“bla1”或标签为“bla2”
XCUIElementTypeWindow[name == "you're the winner"]/XCUIElementTypeAny[visible == 1] - 选择名为“你是赢家”的第一个窗口的所有可见子项
XCUIElementTypeWindow/XCUIElementTypeTable/XCUIElementTypeCell[visible == 1][$type == XCUIElementTypeImage AND name == 'bla'$]/XCUIElementTypeTextField - 选择一个文本字段,它是可见表格单元格的直接子项,其中至少有一个带有标识符“bla”的后代图像

(2)间接后代搜索请求-相对路径

  • **/XCUIElementTypeCell[name BEGINSWITH "A"][-1]/XCUIElementTypeButton[10] - 选择树中最后一个单元格的第10个子按钮,其名称以“A”开头。
  • **/XCUIElementTypeCell[name BEGINSWITH "B"] - 选择树中的所有单元格,其中名称以“B”开头
  • **/XCUIElementTypeCell[name BEGINSWITH "C"]/XCUIElementTypeButton[10] - 选择树中第一个单元格的第10个子按钮,其名称以“C”开头,并且至少有十个直接子类型为XCUIElementTypeButton。
  • **/XCUIElementTypeCell[name BEGINSWITH "D"]/**/XCUIElementTypeButton - 选择树中第一个单元格的所有后代按钮,其名称以“D”开头

2、iOSNsPredicate 用法
(1)
WebDriverAgent当前定义了以下元素属性:

  1. name - 如果未设置第一个元素,则元素的可访问性标识符或元素标签的实际值
  2. value - 元素的价值。它始终是字符串类型(或者nil如果未设置该值)并包含相应元素的值。根据元素的类型,可以是:文本字段中的文本或占位符文本; 文字标签的标签; '1'或者'0'如果这是一个复选框或开关
  3. label- 元素的标签值或nil不存在
  4. rect - 元素的矩形作为字典,具有以下键:x,y,width,heigth
  5. type - 键入字符串。在 XCTest教程页面上枚举了所有可能的元素类型。
  6. enabled- 元素是否启用(1/ 0
  7. visible- 元素是否显示(1/ 0
  8. accessible- 元素是否可访问(1/ 0
  9. accessibilityContainer- 元素是否是辅助功能容器(1/ 0
    例如,所有这些属性名称也可以在具有wd前缀的谓词查询中使用wdName
    例子:
    type == 'XCUIElementTypeButton' AND value BEGINSWITH[c] 'bla' AND visible == 1-发现型XCUIElementTypeButton其值始于的元件Bla/ bla/ BLA和它们是可见 type IN {'XCUIElementTypeIcon','XCUIElementTypeImage'} AND visible == 1-找到所有可见图标和图像 type == 'XCUIElementTypeCell' AND rect.width > 100-查找其宽度大于100的所有小区 type == 'XCUIElementTypeCheckBox' AND (visible == 1 OR enabled == 1)-找到所有复选框,其是可见的或启用
    (2)
    iOSNsPredicate("name = ‘head new‘"); // 等于
    iOSNsPredicate("name LIKE ‘*new‘"); // 模糊匹配
    iOSNsPredicate("name MATCHES ‘^$‘"); // 正则表达式匹配
    iOSNsPredicate("name CONTAINS ‘我的‘"); // 包含
    iOSNsPredicate("name BEGINSWITH ‘我的‘"); // 以"我的"开始
    iOSNsPredicate("name BEGINSWITH ‘我的‘ && name ENDSWITH ‘消息‘"); // 以"我的"开始并且以"消息"结尾
    其中属性名参照inspector的属性字段,关键字LIKE,MATCHES,CONTAINS,BEGINSWITH,ENDSWITH必须是大写,匹配的字符需要用单引号
    部分参考链接:https://blog.csdn.net/huodoubi/article/details/78784141
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335