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)