移动端测试之appium元素定位方法

appium元素定位方法

通用的定位方法

通过id定位 self.driver.find_element(by=AppiumBy.ID, value= id_value)

通过name定位 self.driver.find_element(by=AppiumBy.NAME, value= name)

通过class name定位 self.driver.find_element(by=AppiumBy.CLASS_NAME, value= class_name)

通过CSS selector定位 self.driver.find_element(by=AppiumBy.CSS_SELECTOR, value='[id="%s"]')通过CSS选择器来定位元素。CSS选择器是一种强大的定位方式,它允许你使用类似于CSS样式规则的语法来选择元素。

通过xpath定位 self.driver.find_element(by=AppiumBy.XPATH,value='//*["@content-desc=\"Navigation menu\"]')元素在页面中其实是一个树状结构,xpath就是元素的绝对位置,这种方式可以定位没有其他标识或者标识不唯一的元素,//*代表了全部,是xpath的语法。

通过tag name定位 self.driver.find_element(by=AppiumBy.TAG_NAME, value= tag_name)

通过link text或者部分link text定位 self.driver.find_element(by=AppiumBy.LINK_TEXT/PARTIAL_LINK_TEXT, value= link_text)

Android定位方法

通过accessibility id定位 self.driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value= accessbility_id) 这是app的jsonwp协议中增加的定位方式,可以使用手机app中为无障碍标识进行元素定位。

通过 Android Data Matcher 进行元素定位,Android Data Matcher 是一种基于数据匹配的元素定位方式,可以通过元素的属性值、文本内容、子元素等多个条件来定位元素。使用 ANDROID_DATA_MATCHER 定位方法时,需要传入一个 JSON 格式的 Android Data Matcher 对象作为参数,该对象包含以下属性:

  • name:Android Data Matcher 的名称,用于指定使用哪种 Android Data Matcher 进行定位。

  • args:Android Data Matcher 的参数列表,用于指定 Android Data Matcher 对象的参数,可以为空。

  • class:Android Data Matcher 的类名,用于指定要匹配的元素的类名。

  • package:Android Data Matcher 的包名,用于指定要匹配的元素所在的包名。

matcher = DataMatcher(
    name="hasEntry",
    args=["text", "Hello"],
    class_name="android.widget.TextView",
    package_name="com.example.myapp"
)
self.driver.find_element(by=AppiumBy.ANDROID_DATA_MATCHER, value=matcher)

使用 Android View Matcher 对象进行元素定位。Android View Matcher 是一种基于 ViewMatcher 的元素定位方式,可以通过元素的属性、文本内容、子元素等多个条件来定位元素。

使用 AppiumBy.ANDROID_VIEW_MATCHER 定位方法时,需要传入一个 JSON 格式的 Android View Matcher 对象作为参数,该对象包含以下属性:

  • name:Android View Matcher 的名称,用于指定使用哪种 Android View Matcher 进行定位。

  • args:Android View Matcher 的参数列表,用于指定 Android View Matcher 对象的参数,可以为空。

  • class:Android View Matcher 的类名,用于指定要匹配的元素的类名。

  • package:Android View Matcher 的包名,用于指定要匹配的元素所在的包名。

matcher = ViewMatcher(
    name="hasEntry",
    args=["text", "Hello"],
    class_name="android.widget.TextView",
    package_name="com.example.myapp"
)
self.driver.find_element(by=AppiumBy.ANDROID_VIEW_MATCHER, value=matcher)

使用 AppiumBy.ANDROID_UIAUTOMATOR 定位方法可以通过 UiAutomator 对象进行元素定位。UiAutomator 是 Android 平台上的一个自动化测试框架,可以通过元素的属性、文本内容、子元素等多个条件来定位元素。

使用 AppiumBy.ANDROID_UIAUTOMATOR 定位方法时,需要传入一个字符串类型的 UiAutomator 对象作为参数,该对象包含以下属性:

  • UiSelector():用于指定要匹配的元素的属性值、文本内容、子元素等条件,可以使用 UiSelector 对象的各种方法进行设置。

uiselector_str = 'new UiSelector().className("android.widget.TextView").text("Hello")'
self.driver.find_element(by=AppiumBy.ANDROID_UIAUTOMATOR, value=uiselector_str)

使用 by=AppiumBy.ANDROID_VIEWTAG 定位方法可以通过 ViewTag 进行元素定位。ViewTag 是 Android 平台上的一个元素属性,可以通过设置元素的 android:tag 属性来进行定位。

self.driver.find_element(by=AppiumBy.ANDROID_VIEWTAG, value="example_tag")
iOS定位方法

使用 IOS_CLASS_CHAIN 定位方法时,需要传入一个字符串类型的 iOS Class Chain 语句作为参数,该语句由多个条件组成,以 > 符号分隔,每个条件都是一个类名或属性值。

class_chain_str = 'XCUIElementTypeWindow[1]>XCUIElementTypeOther[3]>XCUIElementTypeButton'
self.driver.find_element(by=AppiumBy.IOS_CLASS_CHAIN, value=class_chain_str)

使用 IOS_UIAUTOMATION 定位方法时,需要传入一个字符串类型的 UIAutomation 对象作为参数,该对象包含以下属性:

  • UIATarget.localTarget():表示当前应用程序的 UIAutomation 上下文。

  • .frontMostApp():表示当前应用程序的前台应用。

  • .mainWindow():表示当前应用程序的主窗口。

  • .elements():表示当前应用程序中的所有元素。

  • .withName():用于指定要匹配的元素的名称。

  • .withPredicate():用于指定要匹配的元素的谓词条件。

  • .withValueForKey():用于指定要匹配的元素的属性值。

uiautomation_str = '.elements().withName("example_element")'
self.driver.find_element(by=AppiumBy.IOS_UIAUTOMATION, value=uiautomation_str)

使用 IOS_PREDICATE 定位方法时,需要传入一个字符串类型的 Predicate 语句作为参数,该语句由多个条件组成,使用逻辑运算符(如 AND、OR、NOT)进行组合。

predicate_str = 'name CONTAINS "example" AND visible == 1'
element = self.driver.find_element(by=AppiumBy.IOS_PREDICATE, value=predicate_str)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值