Appium入门_adb命令+元素定位笔记
一、adb工具
- adb(Android Debug Bridge)是android sdk的一个工具,是用来连接安卓手机和PC端的桥梁。(安卓手机内核是Linux系统,需要熟悉Linux知识。)
- 注意:adb安装和卸载apk需要开启权限。
1、adb常见命令
命令 |
描述 |
adb --help |
查看帮助手册 |
adb devices |
检测连接到电脑的安卓设备 |
adb logcat |
打印log信息:adb logcat >>文件路径 |
adb pull <手机路径> <本机路径> |
从手机中拉取信息放到本地电脑上 |
adb push <本机路径> <手机路径> |
从本地推送信息到手机上去 |
adb shell |
登录设备shell(命令行的人机界面) |
adb install xxx.apk |
安装apk |
adb uninstall 应用包名 |
卸载apk |
adb shell dumpsys activity |find “mFocusedActivity” |
查看前台应用activity名 |
adb connect/disconnect |
通过wifi进行远程连接手机进行 |
adb kill server |
终止adb服务 |
adb start server |
启动adb服务 |
adb shell pm list packages |
列出所有包名
|
adb shell dumpsys window | findstr mCurrentFocus |
查看当前运行的apk包名和activity |
- 通过adb命令点击坐标(x,y):os.system('adb shell input tap x y')
- adb shell dumpsys activity top | findstr ACTIVITY
- adb shell ps 12042(12042为pid)
二、UI Automator工具
UI Automator框架的主要特点 |
||
功能 |
工具 |
介绍 |
元素定位 |
UI Automator Viewer |
扫描、分析待测应用的UI组件的图像工具 |
元素操作 |
Accessing device state |
在目标设备和app上的各种操作 |
元素识别 |
UI Automator APIs |
在多个应用程序中捕获和操作UI组件 |
1、UI Automator Viewer
- 元素定位工具uiautomatorviewer.bat,位于sdk安装目录下的tools。
- 注意:uiautomatorviewer.bat不支持对android9.0系统直接截屏(好像对8.0以后的android系统都不支持直接截屏)。
1.1 间接截屏
- 用Uiautomatorviewer去读取已经准备好的截图文件,从而进行元素定位。
1.2 直接截屏
- 下载ddmlib、ddms、ddmuilib 、uiautomatorviewer并将这4个jar包替换到sdk安装目录/tools/lib 下面。
- 下载链接:https://pan.baidu.com/s/1NIPNk8ApQIPveVkAfVOpJA 提取码:k5rc
三、Appium Inspector工具
- Appium Inspector是Appium Desktop附带的一个元素定位检查器,用来调试定位应用程序很方便。
- Appium Inspector工具同时支持Android系统和IOS系统中原生界面的元素定位。
- 参考链接:https://www.cnblogs.com/kaka00311/p/16180685.html
1、Appium Inspector打开方式
- 以管理员身份启动Appium server,点击编辑配置,配置 JDK 和 android-sdk,选择本地安装路径,如图所示:(若系统已配置JDK 和 android-sdk环境变量,则可省略该步骤)
- 配置完成后,点击“启动服务器”
- 连接设备
(1) 选择真机:电脑USB连接手机, 手机需打开开发者选项 -> USB调试
(2) 连接设备-使用模拟器
** 通过安卓 adb 连接虚拟机,需要在控制台执行 adb connect 127.0.0.1:4723 命令,让 adb 连接上虚拟机,执行了连接模拟器的命令后,可以在 cmd 控制台输入 adb devices 查看当前连接的虚拟机。
2、Appium查看APP元素
- Appium启动成功页面,点击右侧的搜索图标会进入自动设定页面,在”所需功能“Tab下方配置APP信息,配置好后信息可进行保存,点击"启动会话"按钮即可打开模拟器中对应的页面。
** 设备配置可参考:https://www.cnblogs.com/kaka00311/p/16180512.html
- appium中显示列表页面中所有元素,可点击具体按钮查看对应的元素属性,进行元素定位。
四、appium元素定位
1、常用元素定位方法
元素定位方式 |
(1)通过id定位元素:resource-id |
|
(2)通过ClassName定位:classname (class对应的是元素类型,如input) |
|
(3)通过AccessibilityId定位:content-desc |
|
(4)通过AndroidUiAutomator定位 |
|
(5)通过xpath定位 |
|
- Appium定位方式
1 2 3 4 5 6 7 8 9 | from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy driver = webdriver.Remote( 'http://127.0.0.1:4723/wd/hub' ,desired_caps) driver.find_element(AppiumBy. ID ,’btn_login’).clink() driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("手机号")' ).click() |
2、UiSelector介绍
- UiSelector官方文档:https://developer.android.com/reference/androidx/test/uiautomator/UiSelector
- 通过AndroidUiAutomator定位方法的参数为UiSelector类定位元素的表达式:
new UiSelector().函数名称(“定位表达式”)
- 实例化一个UiSelector对象,并通过实例调用接口
1 | 示例:driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId(“com.fenwoo: id / btn_login”)’) |
2.2 隐藏键盘
- hide_keyboard()
2.3 滑动屏幕
- 滑动接口:swipe(起始X,起始Y,结束X,结束Y)
(1)结束X - 起始X:X轴滑动的距离
(2)结束Y - 起始Y:Y轴滑动的距离
手机屏幕尺寸如何兼容(原理) |
|
(1)先获取设备的屏幕大小(长、宽) |
size=get_window_size() |
(2)再设置滑动的距离与屏幕大小的百分比 |
x=size[‘width’]*?,y=size[‘height’]*? |
(3)调用滑动接口执行滑动操作 |
driver.swipe(start_x,start_y,end_x,end_y) |
2.4 模拟触屏
- TouchAction类
将一系列的动作放在一个链条中,然后将该链条传递给服务器,服务器接受到链条后,解析这个动作,逐个执行。
- 模拟屏幕解锁图案滑动:
TouchAction(driver).press(x=?,y=?).wait(100).move_to(x=?,y=?).release().perform()
方法 |
描述 |
press |
短按 |
longPress |
长按 |
tap |
点击 |
move_to(x,y) |
移动到(x,y为相对上一个坐标的移动距离) |
wait |
等待 |
release |
释放 |
perform |
执行 |
cancel |
取消 |
- 注意:appiumv1.7之前的版本用的是绝对定位,v1.7之后的版本是相对定位,movet_to(x,y)的坐标值需要根据具体情况修改。
2.5 Toast提示信息获取
- toast提示信息相当于弹窗提示信息,只能查看无法操作和关闭。
Toast注意事项 |
(1)desired_caps[“automatorName”]=”UIAutomator2” |
(2)appium server版本1.6.3+ |
(3)安卓版本5.0+ |
(4)jdk1.8 64位及以上,配置其环境变量JAVA_HOME和path |
- xpath表达方式:xpath=’//*[contains(@text,”部分文本内容”)]’
- 注意:driverWait方法中,请用presence_of_element_located,不要用visibility_fo_element_located,对toast可见处理并不支持,会直接报错,命令无法执行。
2.6 hybird混合应用自动化方案
- 基于UiAutomator+Chromedriver
- Native部分走uiautomator,webview部分走chromedriver,二者结合
- 要求:Android4.4+,webview必须为debug版本
- 区分app和h5:真机->开发者选项->显示边界布局
获取webview页面的三种方式 |
(1)chrome://inspect,需要FQ |
(2)使用driver.page_source获取html页面 |
(3)找开发人员要源文件 |
(4)安装uc-devtools,不需要FQ 可用于定位html页面元素 |
- contexts只能获取NATIVE_APP,无法获取WEBVIEW,使用uiautomatorviewer定位元素,显示class值为:android.webkit.WebView,但是driver.context只打印出了‘NATIVE_APP’。解决方法:app打包时需要开webview的debug属性setWebContentDebuggingEnabled(true)
- 开启webview可见:https://developer.chrome.com/docs/devtools/remote-debugging/webviews/
2.6.1上下文切换
方法 |
可用的命令 |
可用的上下文(Contexts) |
列出所有可用的上下文(列表):driver.contexts |
当前上下文(context) |
列出当前的上下文:driver.current_context |
切换至默认的上下文(context) |
切换至默认的上下文:driver.switch_to.context(None) |
当前Activity - 仅支持Android |
获取当前的Activity:driver.current_activity |
当前包名(package)- 仅支持Android |
driver.current_package |
- app中webview元素定位注意事项:
(1)启动appium时,需要指定chromedriver.exe的目录,使用appium默认目录下的会报错。需要指定一个非默认目录下面的chromedriver.exe(X5内核对应的版本)。
(2)方法:在appium->高级选项设置chromedriver.exe路径:url
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律