
正文
Appium-desktop元素定位
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
一、打开 appium-desktop ,点击 start session

二、打开后,点击屏幕右上角的搜索按钮

三、然后会打开配置页面,在本地服务配置信息同上面写的代码链接配置。填入正确的信息后,点击 startSession

成功启动模拟器中的程序。如下图。此时如果模拟器和 appium-desktop 中界面不同,可点击刷新按钮同步下。

四、定位方式
1、id定位,如下
点击定位元素按钮,点击左侧app界面中的我的定位元素后,就会出现selected element界面。

此时,右侧栏中可以看到,有个id,下拉滚动条会发现还有个resource-id。会发现他们两个是一样的。这就是说明,这个id是唯一的,登录按钮被唯一定位到,代码中就可以通过id直接定位。
dr.find_element_by_id('com.yw.yzz:id/seting_tab').click()
2、xpath定位

- 用定位元素按钮定位某个元素后,右侧selected element栏目中找到xpath,复制其对应的内容。通过xpath方法就可以定位
dr.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout[4]/android.widget.RadioButton').click()
- 还或者如下通其他属性进行编写
dr.find_element_by_xpath('//android.widget.RadioButton[@id="com.yw.yzz:id/seting_tab"]').click()
3、提示信息进行定位,也就是 content-desc:
先用定位元素按钮定位某个元素后,右侧 selected element 栏目中,找到 content-desc,复制 content-desc 的值后。通过 find_element_by_accessibility_id(),将对应的值作为参数传入。

dr.find_element_by_accessibility_id('content-desc').send_keys("1777982xxxx")
4、AndroidUiautomator定位
这个在运行时,调用的是Android自带的UI框架UiAutomator的Api。格式固定,介绍几个常用的格式如下:

#text内容dr.find_element_by_android_uiautomator('new UiSelector().text("QQ号/手机号/邮箱")').send_keys("1777982xxxx")# 包含text文字dr.find_element_by_android_uiautomator('new UiSelector().textContains("手机号")').send_keys("1777982xxxx")# 以text什么开始dr.find_element_by_android_uiautomator('new UiSelector().textStartsWith("QQ号")').send_keys("1777982xxxx")# 正则匹配textdr.find_element_by_android_uiautomator('new UiSelector().textMatches("^QQ号/手机号.*")').send_keys("1777982xxxx")dr.find_element_by_android_uiautomator('new UiSelector().textMatches(".*手机号.*")').send_keys("1777982xxxx")

# resource-id、resourceIdMatchesdr.find_element_by_android_uiautomator('new UiSelector().resourceId("com.tencent.mobileqq:id/login")').click()

# description(Content-desc的属性的值为desc)dr.find_element_by_android_uiautomator('new UiSelector().description("请输入QQ号码或手机或邮箱")').send_keys("1777982xxxx")# descriptionStartsWith(以content-desc的属性值desc开始)dr.find_element_by_android_uiautomator('new UiSelector().descriptionStartsWith("请输入QQ号码")').send_keys("1777982xxxx")# descriptionMatches(content-desc中包含desc)dr.find_element_by_android_uiautomator('new UiSelector().descriptionMatches(".*或邮箱$")').send_keys("1777982xxxx")dr.find_element_by_android_uiautomator('new UiSelector().descriptionMatches(".*QQ号码或手机.*")').send_keys("1777982xxxx")
5、find_elements_by_xxx() 用法
dr.find_elements_by_class_name("android.widget.EditText")dr.find_elements_by_id("com.tencent.mobileqq:id/btn_login")
# classNamedr.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.TextView")')# classNameMatchesdr.find_elements_by_android_uiautomator('new UiSelector().classNameMatches("^android.widget.*")'
6、tap() 坐标定位点击操作

tap(self, positions, duration=None): :Args: - positions - list类型,里面对象是元组,最多五个。如:[(100, 20), (100, 60)] - duration - 持续时间,单位毫秒,如:500
# coding:utf-8from appium import webdriverfrom time import sleepdesired_caps = { 'platformName': 'Android', 'deviceName': '127.0.0.1:62001', 'platformVersion': '4.4.2', 'appPackage': 'com.baidu.yuedu', 'appActivity': 'com.baidu.yuedu.splash.SplashActivity' }driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)sleep(5)# 点弹出框去看看driver.tap([(810, 1776), (1080, 1905)], 500)# 返回上一页driver.back()sleep(2)
五、通过不同的定位方式查找元素
我们也可以通过 appium-desktop 的 search for element 功能。通过定位方式和对应的值来查找元素,从而验证定位方式和值的正确性


可以看到定位方式就是我们第4种说的集中定位方式。选择一个定位方式,填入对应的值,点击search

选中找到的元素,可以看到左侧对应手机界面中的元素被选中。从而也证明我们的这种定位方式和对应的值都是没问题的。可以定位到元素的。
如果是按钮,就点击 tap element ,相当于代码中的click()
如果是输入框,就在‘enter keys' 中输入内容,然后点击sendkeys就可以往已选的元素中输入内容,相当于代码中的send_keys() 
六、录制
点击小眼睛图标的录制按钮,可以看到界面展现出来代码模块。可以选择录制语言=》python或其他

然后和右侧selected element 栏目中的tap、send keys、clear 或者 search for element结合操作,根据search for element找到元素定位i,并tap或者sendkeys等操作。这些操作都会被录制下来并生成python代码。可直接使用







