一、adb常用命令 及 Appium的元素定位工具
以下命令均在cmd中进行操作
- 连接夜神模拟器:
adb connect 127.0.0.1:62001
- 查看连接的设备:
adb devices
- 查看被测app的包名以及界面名
adb shell dumpsys window windows | findstr mFocusedApp
- 元素常见的几个属性:
text
resourceId
class: 元素标签
content-desc: 元素功能描述
注:在截屏的时候,必须当前截屏的终端没有其他的进程在占用,包括appium server - 文本定位工具:
1.1 uiautomator
安卓SDK自带的定位工具
1.2 appium Desktop Inspector
appium-server 自带的定位工具
1.3 weditor
Uiautomator2 python第三方库 app自动化测试框架
安装Uiautomator2:
命令01:pip install Uiautomator2
命令02: python -m uiautomator2 init
命令03: pip install weditor
确认安装: weditor --help
启动weditor: python -m weditor
二: Appium界面元素定位方法(id/ClassName/accessibility/xpath)
- 通过resourceId属性定位 find_element(AppiumBy.ID, value) 返回的是一个WebElement对象
- 通过文本定位 find_element(AppiumBy.ANDROID_UIAUTOMATOR, ‘new UiSelector().text(“value”).方法二’) 组合定位
通过调用系统自带框架(Uiautomator1/Uiautomator2)实现元素定位,基于java代码编写UiSelector实现元素定位,提供很多方法,通过多个属性实现元素定位 - 通过这个content-desc/description属性实现元素定位
find_element(AppiumBy.ACCESSIBILITY_ID, “value”) - 通过xpath定位,一般不建议采用这个方法进行定位
三、APP元素的操作
- APP四大常用操作:click()点击, send_keys()发送, get_attribute() 获取属性, text() 获取文本
- 滑屏, 多点触控, 长按 …
- 滑屏操作: 左滑、右滑
driver.swipe(self: T, start_x: int, start_y: int, end_x: int, end_y: int, duration: int = 0)
参数说明:
start_x: 开始位置的x坐标
start_y: 开始位置的y坐标
end_x: 结束位置的x坐标
end_y: 结束位置的y坐标
左滑: 开始位置的x坐标 > 结束位置的x坐标, 开始位置的y坐标 = 结束位置的y坐标
示例代码
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
# 初始化 app 的配置信息
des_caps = {
"platformName": "android", # 操作系统
"platformVersion": "7.1.2", # 系统版本
"deviceName": "****", # 连接的名称
"appPackage": "com.organizationuniapp", # app的包名
"appActivity": "io.dcloud.PandoraEntryActivity", # app的界面名
"unicodeKeyboard": True, # 使用unicode输入法
'resetKeyboard': True, # 重置输入法到初始状态
'noReset': True # 启动app时不要清除app里的原有的数据
}
# 连接appium-server
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', des_caps)
# 三大等待: 强制等待, 显示等待, 隐式等待
driver.implicitly_wait(15)
# 利用 text文本来获取元素
code = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("获取验证码")')
code.click()
# 利用xpath来获取元素(不建议)
username = driver.find_element(AppiumBy.XPATH, "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.widget.LinearLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View[1]/android.view.View/android.widget.EditText")
username.send_keys("19922222222")