appuim自动化的流程
首先要启动appuim的服务
服务端:
客户端:
发送post的请求:POST /wd/hub/session
携带这些参数
创建这些请求: Calling AppiumDriver.createSession() with args
在5037端口启动adb服务: Running ‘E:\Download\android-sdk_r24.4.1-windows\android-sdk-windows\platform-tools\adb.exe -P 5037 start-server’
adb的版本可以不填写,会处理默认的,如果填写必须写对。
后面的基本都是adb命令
建立端口转发:
PC端连接手机端、启动应用的原理:
2.Android应用基础知识
2.1App类型介绍
1.Native app 原生的 直接在操作系统上的、性能最强、交互最好、根据系统的底层所有的功能都能实现。缺点:开发成本高、不能跨平台、更新时比较慢、审核周期和维护成本比较高。
2.Hybrid&webview 混合应用 可跨平台 、开发成本 调试 成本低一些。
3.web app 手机浏览器 比如UC浏览器,就是一个网站 好维护。缺点:通知 提醒 动态效果都不能用、体验感差。
怎么分辨:
浏览器打开的肯定是web浏览器
能框住的都是原生的、不能框住的都是web浏览器的,之后会有工具直接判断
2.2包名&类名
packageName :app的唯一身份标识、如果遇到相同的包名 会提示是否覆盖。
activity: 简单来说就是一个页面
activityName 页面的名字 类名 .开头
2.3布局和控件
布局:
框架布局:
线性布局:LinearLayout
绝对布局: 采用坐标轴的
相对布局:
表格布局:
控件:
TextView -文本控件,展示文字
EditText - 编辑框 用于接收用户的输入
Button - 按钮
checkbox - 复选框
imageview- 图片控件 用来展示图片
控件上的属性
index 索引
text 文本属性
resource-id 控件的资源id 不唯一,有的没有
3定位调试工具
3.1 Ui Automator Viewer
这个工具的好处就是特别快 不浪费资源 就相当于获取截图
3.2 weditor
openatx的子项目
是通过浏览器打开
pip install weditor 安装
weditor 启动
启动后的画面:启动后在手机上安装了ATX应用
3.3 Appium Desktop的检查器会话
如果用weditor启动后 再回appuim启动时会报错、是因为ATX服务在启动中的状态,可以手动关了、也可以重启模拟器。
4.XML
安卓的每一个页面都是通过一个xml文档去表示的
xml 可扩展的标记语言(EXtensible markup language)
表示数据,用来传输,不用来显示数据
具有自我描述
xml:焦点是数据内容
html: 焦点显示数据,网页
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
<?xml version="1.0" encoding="utf-8"?>
<person>
<name name="name">心蓝</name>
<age>18</age>
</person>
5. Appium-python-client
5.1 安装:
pip install appium-python-client
5.2 简单使用
1、创建一个客户端,并且要和服务连接
2、需要携带capabilities,创建一个会话
3、通过这个会话再去操作其他
from appium import webdriver
# 启动配置
desired_caps = {
'platformName': 'Android',
'deviceName': 'emulator-5554',
'appPackage': 'com.lemon.lemonban',
'appActivity': '.activity.MainActivity'
}
# 连接服务器并打开应用
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
在控制台打开不结束程序:
5.3 定位
id:
resource_id 它不唯一,需要验证
class name
类名
xpath
Accessibility ID
id com.lemon.lemonban:id/navigation_my
driver.find_element_by_id('com.lemon.lemonban:id/navigation_my').click()
class_name
driver.find_element_by_class_name('android.widget.ImageButton')
Accessibility ID
driver.find_element_by_accessibility_id()