一、 获取app的信息
1.1、获取App启动的appPackage和appActivity
方式一:通过 logcat 日志获取
# linux/mac启动日志打印命令,每次操作设备上的app都会打印package和activity信息。
adb logcat ActivityManager:I | grep "cmp"
# windows
adb logcat ActivityManager:I | findstr "cmp"
打开App第一次获取的cmp中的内容,就是所需要的启动appPackage和appActivity
方式二:通过 aapt 获取
# mac/Linux
aapt dump badging wework.apk | grep launchable-activity
# windows
aapt dump badging wework.apk | findstr launchable-activity
验证获取的appPackage和appActivity是否正确
# 启动应用命令
adb shell am start -W -n <package-name>/<activity-name> -S
示例:启动企业微信app
C:\Users\18367>adb shell am start -W -n com.tencent.wework/.launch.LaunchSplashActivity -S
Stopping: com.tencent.wework
Starting: Intent {
cmp=com.tencent.wework/.launch.LaunchSplashActivity }
Status: timeout
Activity: com.tencent.wework/.launch.LaunchSplashActivity
WaitTime: 10217
Complete
1.2、App信息
app信息
# 获取当前界面元素
adb shell dumpsys activity top
# 获取任务列表
adb shell dumpsys activity activities
二、appium元素定位与三种等待
2.1、desirecapability介绍
Capability设置
常用参数
app:apk地址
appPackage:包名
appActivity:Activity名称
automationName:android默认使用uiautomator2,ios默认使用XCUITest
noReset/fullReset:是否在测试前后重置相关环境
unicodeKeyboard和resetKeyboard: 是否需要输入非英文之外的语言并在测试完成后重置输入法
dontStopAppOnReset:首次启动的时候,不停止app(可以调试或者运行的时候提升运行速度)
skipDeviceInitialization:跳过安装,权限设置等操作(可以调试或者运行的时候提升运行速度)
2.2、appium元素定位
常用的两种定位方式id,accessibility_id
driver.find_element_by_id(resource-id)
driver.find_element_by_accessibility_id(content-desc)
2.3、三种等待
强制等待
也叫做进程等待,通常通过sleep等待固定的时间,一般不推荐
隐式等待(全局性)
设置一个超时时间,服务端appium会在给定的时间内,不停的查找,默认值是0
用法:self.driver.implicitly_wait(5)
在服务端等待
显式等待(等待某个元素)
在客户端等待
用法:WebDriverWait(driver, 10).until(lamba x: x.find_element(By.ID, ''))
三、app控件定位
3.1、android/ios基础知识
android基础知识
Android 是通过容器的布局属性来管理子控件的位置关系,布局过程就是把界面上的所有控件,根据他们的间距的大小,摆放在正确的位置。
Android七大布局:
- LinearLayout(线性布局)
- RelativeLayout(相对布局)
- FrameLayout(帧布局)
- AbsoluteLayout(绝对布局)
- TableLayout(表格布局)
- GridLayout(网格布局)
- ConstraintLayout(约束布局)
Android四大组件:
- activity:与用户交互的可视化界面
- service:实现程序后台运行的解决方案
- content provider:内容提供者,提供程序所需要的数据
- broadcast receiver:广播接收器,监听外部事件的到来(比如来电)
常用的控件:
- TextView:文本控件
- EditText:可编辑文本控件
- Button:按钮
- ImageButton:图片按钮
- ToggleButton:开关按钮
- ImageView:图片控件
- CheckBox:复选框控件
- RadioButton:单选框控件
布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而编写出精美的控件。当然布局的内部除了放置控件外,也可以放置布局,通过多层布局的嵌套,我们就能够完成一些比较复杂的界面。