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

posted @ 2021-06-15 15:48  苍山。  阅读(109)  评论(0编辑  收藏  举报