启动过程
appium的启动实际上是在本机使用了4723端口开启了一个服务
1. 我们写的 python 代码会访问本机的 appium 服务器,并获取 driver 对象
2. appium 会将我们的 driver 对象调用的方法转化成 post 请求,提交给appium服务器
3. appium 通过接收到的 post 请求发送给手机,再由手机进行执行
# 导模块
from appium import webdriver
# 创建一个字典,包装相应的启动参数
desired_caps = dict()
# 需要连接的手机的平台(不限制大小写)
desired_caps['platformName'] = 'Android'
# 需要连接的手机的版本号(比如 5.2.1 的版本可以填写 5.2.1 或 5.2 或 5 ,以此类推) desired_caps['platformVersion'] = '5.1'
# 需要连接的手机的设备号(andoird平台下,可以随便写,但是不能不写)
desired_caps['deviceName'] = '192.168.56.101:5555'
# 需要启动的程序的包名
desired_caps['appPackage'] = 'com.android.settings'
# 需要启动的程序的界面名
desired_caps['appActivity'] = '.Settings'
# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 退出
driver.quit()
App基础操作API
import os
from app.util import encode_data, decode_data, get_driver
driver = get_driver()
"3、app是否已安装"
is_installed = driver.is_app_installed('com.example.corel.calc')
# eg:没安装安装,安装了就卸载
if is_installed:
"2、卸载手机自己安装的app,不能卸载系统的app"
driver.remove_app('com.example.corel.calc')
else:
"1、安装apk到手机,支持重复安装进行覆盖,绝对路径"
driver.install_app(os.getcwd() + os.sep + 'apk' + os.sep + 'com.example.corel.calc_2.1.1023_11.apk')
"""4、发送⽂件到⼿机,eg:将hello写入到手机
driver.push_file(path, data)
参数:
path:⼿机设备上的路径(例如:/sdcard/a.txt)
data:⽂件内数据,要求base64编码
Python3.x中字符都为unicode编码,⽽b64encode函数的参数为byte类型,需要先转码;⽣成的数据为byte类型,需要将byte转换回去。"""
data = encode_data('hello')
driver.push_file('/sdcard/abc.txt', data) # 不指定abc.txt,会生成一个.tmp结尾的临时文件,不便于后续的维护
"5、从手机拉取文件,返回的是base64编码数据"
data = driver.pull_file('/sdcard/abc.txt') # 返回数据为base64编码
re_data = decode_data(data)
print(re_data)
"6、获取 当前屏幕 元素结构,返回xml字符串,只是当前屏幕(activity页面内容是xml承载的)"
with open('./result/page.xml', 'w') as f:
f.write(driver.page_source)
driver.quit()
import base64
from appium import webdriver
# 输⼊⽂本内容到⼿机,中文输入支持:
# 1 使用Unicode键盘:'unicodeKeyboard': True
# 2 重置键盘&#x