appium定位方式
1. 通过id定位
resource-id也称为id,resource-id是唯一的
agree_continue_id = "com.baidu.searchbox:id/positive_button" driver.find_element_by_id(agree_continue_id).click()
2. 通过className定位
agree_continue_class = "android.widget.Button" driver.find_elements_by_class_name(agree_continue_class)[1].click()
3. 通过AccessibilityId定位
AccessibilityId也称为content-desc
tiku_AccessibilityId = "题库" driver.find_element_by_accessibility_id(tiku_AccessibilityId).click()
4. 通过xpath定位
# 元素定位 agree_continue_xpath = "//*[@text='同意并继续']" driver.find_element_by_xpath(agree_continue_xpath).click() # contains模糊定位 agree_continue_xpath = "//android.widget.Button[contains(@text, '并继续')]" driver.find_element_by_xpath(agree_continue_xpath).click() # 组合定位 agree_continue_xpath = "//*[@class='android.widget.Button' and @text='同意并继续']" driver.find_element_by_xpath(agree_continue_xpath).click() # 层级定位 # 使用lazy uiautomatorviewer,可以看到底下有个fullIndexXpath,这种是全路径的形式,也是层级的形式 agree_continue_xpath = "//android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.Button[2]" driver.find_element_by_xpath(agree_continue_xpath).click()
5. 通过Android UIAutomator定位
android uiautomator原理是通过android 自带的android uiautomator的类库去查找元素,其实和appium的定位一样,或者说他比appium的定位方式更佳多以及更佳适用,它也支持id、className、text、模糊匹配等进行定位。
# 5.1 text定位 根据text属性为“请输入手机号”查找元素。 ele = self.driver.find_element_by_android_uiautomator('new UiSelector().text("请输入手机号")') ele.send_keys("123") # 5.2 text模糊定位 通过text的部分信息就能够进行定位,我们直接看代码: ele = self.driver.find_element_by_android_uiautomator('new UiSelector().textContains("请输入手")') ele.send_keys("123") # 5.3 textStartsWith定位 # 以text什么开始 driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("请输入")')
# 5.4 textMatches 正则匹配查找 ele = self.driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^请输入手.*")') ele.send_keys("123") # 5.5 resourceID定位 和appium封装好的id定位是一样的,只是这里将写法变成了uiautomator的写法而已 ele = self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("cn.com.open.mooc:id/et_phone_edit")') ele.send_keys('234') # 5.6 resourceIDMatches 定位 通过id进行正则匹配定位 ele = self.driver.find_element_by_android_uiautomator('new UiSelector().resourceIdMatches(".+et_phone_edit")') ele.send_keys('234')
# 5.7 className定位 通过调用android uiautomator使用className进行定位 ele = self.driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.EditText")') ele.send_keys('234')
# 5.8 classNameMatches定位 通过className正则匹配进行定位 ele = self.driver.find_element_by_android_uiautomator('new UiSelector().classNameMatches (".*EditText")') ele.send_keys('234')
# 5.9 组合定位 self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/tab_name").text("我的")').click() # 组合定位,一般组合用id,class,text这三个属性会比较好一点 # id+class 属性组合 id_class = 'resourceId("com.xyh.commerce:id/ll_personal").className("android.widget.LinearLayout")' driver.find_element_by_android_uiautomator(id_class).click()
# 父子关系定位 self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/title_container").childSelector(text("股票"))') # 兄弟关系定位 self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/title_container").fromParent(text("股票"))') # 滚动查找 self.driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("查找的元素文本").instance(0));')
6. 使用lazy uiautomatorviewer,可以看到底下有个uiaSelector,将其拷贝到代码
# 元素定位 agree_continue_android_uiautomator = "new UiSelector().className(\"android.widget.Button\").textContains(\"同意并继续\").resourceId(\"com.baidu.searchbox:id/positive_button\")" driver.find_element_by_android_uiautomator(agree_continue_android_uiautomator).click()
LazyUiAutomatorViewer是在UiAutomatorViewer源码基础上进行扩展,
使用方法:
一、将LazyUiAutomatorViewer 源码编译生成的jar包uiautomatorviewer.jar拷贝到安卓安装目录下的 \android-sdk\tools\lib 文件夹中替换掉原来的uiautomatorviewer.jar包。
源码及jar包的下载地址: https://github.com/lazytestteam/lazyuiautomatorviewer;
二、双击安卓安装目录下的 \android-sdk\tools\uiautomatorviewer.bat 文件,启动LazyUiAutomatorViewer 。
三、根据需要,选择导出当前截屏中所有控件或者只选择部分关心的控件进行导出,导出为java文件。
一键导出当前截屏中的所有控件
只选择感兴趣的部分控件进行导出
7. appium与selenium元素定位之比较
————————————————
版权声明:本文为CSDN博主「慕城南风」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lovedingd/article/details/111058898