Appium入门_adb命令+元素定位笔记

发布时间 2023-06-12 18:43:28作者: 每天都要赖床~

一、adb工具

  • adb(Android Debug Bridge)是android sdk的一个工具,是用来连接安卓手机和PC端的桥梁。(安卓手机内核是Linux系统,需要熟悉Linux知识。)
  • 注意adb安装和卸载apk需要开启权限。

1adb常见命令

命令

描述

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

列出所有包名

  • -f:列出所有apk路径及包名
  • -s:列出系统apk路径及包名
  • -3:列出用户apk路径及包名

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组件

1UI Automator Viewer

  • 元素定位工具uiautomatorviewer.bat,位于sdk安装目录下的tools。
  • 注意:uiautomatorviewer.bat不支持对android9.0系统直接截屏(好像对8.0以后的android系统都不支持直接截屏)。

1.1 间接截屏

  •  Uiautomatorviewer去读取已经准备好的截图文件,从而进行元素定位。

1.2 直接截屏

三、Appium Inspector工具

  •  Appium Inspector是Appium Desktop附带的一个元素定位检查器,用来调试定位应用程序很方便。
  • Appium Inspector工具同时支持Android系统和IOS系统中原生界面的元素定位。
  • 参考链接:https://www.cnblogs.com/kaka00311/p/16180685.html

1Appium 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

  • driver.find_element_by_id()

2)通过ClassName定位:classname       class对应的是元素类型,如input)

  • driver.find_element_by_class_name()

3)通过AccessibilityId定位:content-desc

  • driver.find_element_by_accessibility_id()

4)通过AndroidUiAutomator定位

  • driver.find_element_by_android_uiautomator()

5)通过xpath定位

  • driver.find_element_by_xpath()
  • Appium定位方式
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()

2UiSelector介绍

new UiSelector().函数名称(定位表达式)

  • 实例化一个UiSelector对象,并通过实例调用接口
示例: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