zoukankan      html  css  js  c++  java
  • 【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、AccessibilityId

    Android

    Android的content-desc属性对应AccessibilityId定位方式,这个content-desc属性专门为残障人士设置,如果这个属性不为空则推荐使用。

    driver.find_element_by_accessibility_id('请输入QQ号码或手机或邮箱')

    iOS

    iOS的label和name属性都对应AccessibilityId定位方式,如果有则推荐使用。

    3、Xpath

    Android

    Android的Xpath定位与PC的Xpath定位大同小异,可以通过相对路径的定位方式定位。区别在于,这里相对路径定位的//后只可以接Android的class属性或*。

    driver.find_element_by_xpath('//android.widget.EditText[@text="QQ号/手机号/邮箱"]')

    iOS 

    iOS10 以上使用XCUITest框架后,原生框架不支持XPATH,Appium进行了转换,速度很慢不建议使用。

    4、UIAutomator

    Android的源生测试框架的定位方式,定位速度快。推荐使用常用的几种。

    复制代码
     1 # 这个在运行时,调用的是Android自带的UI框架UiAutomator的Api
     2 # 介绍几个简单常用的,text、className、resource-id
     3 # text
     4 # 匹配全部text文字
     5 driver.find_element_by_android_uiautomator('new UiSelector().text("手机号")')
     6 # 包含text文字
     7 driver.find_element_by_android_uiautomator('new UiSelector().textContains("机")')
     8 # 以text什么开始
     9 driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("手")')
    10 # 正则匹配text
    11 driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^手.*")')
    12  
    13 # className
    14 driver.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.TextView")')
    15 # classNameMatches
    16 driver.find_elements_by_android_uiautomator('new UiSelector().classNameMatches("^android.widget.*")')
    17  
    18 # resource-id、resourceIdMatches
    19 driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.syqy.wecash:id/et_content")')
    20  
    21 # description
    22 driver.find_element_by_android_uiautomator('new UiSelector().description("S 日历")')
    23 # descriptionStartsWith
    24 driver.find_element_by_android_uiautomator('new UiSelector().descriptionStartsWith("日历")')
    25 # descriptionMatches
    26 driver.find_element_by_android_uiautomator('new UiSelector().descriptionMatches(".*历$")')
    
    复制代码

    5、iOSPredicateString

    仅支持iOS10以上,可以多个属性同时定位,推荐。(替代XPATH)

    driver.find_elements_by_ios_predicate("label == '登录'")
     
    driver.find_elements_by_ios_predicate("type='XCUIElementTypeOther' and name='联系人,标签, 第2个按钮,共3个'")

    6、iOSUIAutomation

    iOS9.3以下使用,现在已经废弃,iOSPredicateString代替了iOSUIAutomation

    作者:gtea 博客地址:https://www.cnblogs.com/gtea
  • 相关阅读:
    java两个栈实现一个队列&&两个队列实现一个栈
    Java HashSet和ArrayList的查找Contains()时间复杂度
    Java KMP算法代码
    利用集合求取字符串里每个字符的个数
    快速失败and安全失败
    Java 巴什博弈(取石子报数问题)
    [知识点][施工中] 1.1 部分IDE介绍
    [知识点] 4.4 动态规划进阶模型——树形/DAG/数位DP
    [知识点] 4.3 动态规划基础模型——区间DP/LIS/LCS
    [课堂小笔记] 数字电子技术
  • 原文地址:https://www.cnblogs.com/gtea/p/12715865.html
Copyright © 2011-2022 走看看