app 中的元素定位

注意:
这里的定位是指在原生(APP)下进行元素定位,如果是Web(移动端里的浏览器)、混合(APP与WEBVIEW)里含有WEBVIEW页面进行元素定位,元素定位方法同Selenium WebDriver一致,则可以参考Web(Selenium WebDriver)章节里的元素定位子章节。
元素定位工具:
Android使用Android SDK里的uiautomatorviewer工具。
IOS使用Appium Desktop里的Appium Inspector检查器。

by_id
通过id定位元素,IOS应用上的元素没有这个属性,所以仅支持Android
driver.find_element_by_id(“id”)
driver.find_elements_by_id(“id”)
如图所示:利用appium工具查看,id指的是resource-id属性。
在这里插入图片描述
driver.find_element_by_id(“com.android.settings:id/title”)

by_name
Appium版本在1.5之后,Android就不再支持name的元素定位方法。
Android如果使用name方法,则报如下错误:
selenium.common.exceptions.InvalidSelectorException:
Message: Locator Strategy ‘name’ is not supported for this session
IOS可以正常使用name元素定位。
driver.find_element_by_name(“name”)
driver.find_elements_by_name(“name”)
如图所示:利用Appium Inspector检查器,name指的是name属性。
在这里插入图片描述
driver.find_element_by_name(“3个月”)

by_class_name
通过class_name定位元素。
driver.find_element_by_class_name(“class”)
driver.find_elements_by_class_name(“class”)
Android:
如图所示:利用appium工具查看,class_name指的是class属性。
在这里插入图片描述
driver.find_element_by_class_name(“android.view.View”)
IOS:
如图所示:利用Appium Inspector检查器,class_name指的是type属性。
在这里插入图片描述
driver.find_element_by_class_name(“XCUIElementTypeStaticText”)

by_xpath
通过xpath定位元素。
driver.find_element_by_xpath(“xpath表达式”)
driver.find_elements_by_xpath(“xpath表达式”)
xpath用法与web selenium中一致,以下图为例:
在这里插入图片描述
//*[contains(@text, ‘流量使用情况’)]

by_accessibility_id
通过accessibility_id查找元素。表示附加到给定元素的辅助功能标识或标签的字符串。
针对IOS的辅助功能标识符和针对Android的内容描述。
driver.find_element_by_accessibility_id(“accessibility_id”)
driver.find_elements_by_accessibility_id(“accessibility_id”)
Android:
如图所示:利用appium工具查看,accessibility_id指的是content-desc属性。
在这里插入图片描述
driver.find_element_by_accessibility_id(“搜索”)
IOS:
如图所示:利用Appium Inspector检查器,accessibility_id指的是accessibility id或name或label属性。
在这里插入图片描述
driver.find_element_by_accessibility_id(“More Info”)
4.6.by_android_uiautomator
通过Android UIAutomator搜索查找元素。
这允许使用UIAutomator库使用递归元素搜索,来找到Android应用程序中的元素。
driver.find_element_by_android_uiautomator(“android_uiautomator”)
driver.find_elements_by_android_uiautomator(“android_uiautomator”)
如图所示:利用uiautomatorviewer工具查看元素。
在这里插入图片描述
text属性的方法(text指的是text属性)
driver.find_element_by_android_uiautomator(‘new UiSelector().text(“流量使用情况”)’)
driver.find_element_by_android_uiautomator(‘new UiSelector().textContains(“流量使用”)’)
driver.find_element_by_android_uiautomator(‘new UiSelector().textStartsWith(“流量”)’)
driver.find_element_by_android_uiautomator(‘new UiSelector().textMatches("^流量.*")’)
className属性的方法(className指的是class属性)
driver.find_element_by_android_uiautomator(‘new UiSelector().className(“android.widget.TextView”).text(“流量使用情况”)’)
driver.find_element_by_android_uiautomator(‘new UiSelector().classNameMatches(".*TextView$").text(“流量使用情况”)’)
xpath方法定位
driver.find_element_by_android_uiautomator(‘new UiSelector().className(“android.widget.TextView”).childSelector(new UiSelector().text(“A流量使用情况”))’)
如图所示:利用uiautomatorviewer工具查看元素。
在这里插入图片描述

resourceId属性的方法(resourceId指的是resource-id属性)
driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId(“com.android.settings:id/search”)’)
driver.find_element_by_android_uiautomator(‘new UiSelector().resourceIdMatches(".id/search$")’)
description属性的方法(description指的是content-desc属性) driver.find_element_by_android_uiautomator(‘new UiSelector().description(“搜索”)’) driver.find_element_by_android_uiautomator(‘new UiSelector().descriptionStartsWith(“搜”)’) driver.find_element_by_android_uiautomator('new UiSelector().descriptionMatches("^搜.
")’)