1、前置代码

一个脚本中必须要编写的内容,写在前置代码中:

# server 启动参数
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '192.168.56.101:5555'
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings' # 声明driver对象
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

2、安装和卸载APP

(1)把电脑中的APK安装包,安装到手机上。

安装方法:

driver.install_app(app_path)

参数:
app_path:脚本机器中APK文件路径

(2)卸载手机上已安装的APP。

卸载方法:

driver.remove_app(app_id)

参数:
app_id:需要卸载的app包名

(3)演示练习

# 1.导入appium
import time
from appium import webdriver # 2.创建Desired capabilities对象,添加启动参数
desired_caps = {
"platformName": "Android", # 系统名称
"platformVersion": "7.1.2", # 系统版本
"deviceName": "127.0.0.1:21503", # 设备名称
"appPackage": "com.microvirt.launcher2", # APP包名
"appActivity": "com.microvirt.launcher.Launcher" # APP启动名
} # 3.启动APP
# 声明手机驱动对象(实例化webdriver)
# 第一个参数为appium服务的地址,需要启动appium服务。
# 第二个参数为Desired capabilities对象
# 我们就先传入这两个参数就可以了。
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP
# 脚本机器中APK文件路径,注意前边要加一个r,不然解析地址时可能会报错。
app_path = r'C:\Users\L\Desktop\com.taobao.taobao_V9.15.0.apk'
# 安装apk
driver.install_app(app_path)
time.sleep(5) # 要知道即将卸载的app的包名
app_id = "com.taobao.taobao"
# 卸载APP
driver.remove_app(app_id) # 5.关闭APP
time.sleep(3)
driver.quit()

说明:

  • 一般这两个命令很少使用,即使用命令安装apk软件,一般我们也推荐使用adb命令。就不用把安装APP的代码写入脚本中,即使写入脚本,最终执行也是adb命令。如果公司的测试机充裕,我们就把APP的安装包放入手机,直接手动安装了。

  • 一般用到这两个命令是在一个脚本要去测试多个APP的时候,会用到这两个命令,在测试时把这几个APP先安装上,测试完成之后在卸载APP。但是这种情况也基本上不多,一般情况APP都单独测试。

3、判断APP是否已安装

使用的API:

driver.is_app_installed(bundle_id)

参数:
bundle_id: 传⼊app包名,返回结果为True(已安装) / False(未安装)

示例:

# 1.导入appium
import time
from appium import webdriver # 2.创建Desired capabilities对象,添加启动参数
desired_caps = {
"platformName": "Android", # 系统名称
"platformVersion": "7.1.2", # 系统版本
"deviceName": "127.0.0.1:21503", # 设备名称
"appPackage": "com.microvirt.launcher2", # APP包名
"appActivity": "com.microvirt.launcher.Launcher" # APP启动名
} # 3.启动APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP
# 脚本机器中APK⽂件路径
app_path = r'C:\Users\L\Desktop\com.taobao.taobao_V9.15.0.apk'
# 安装apk
driver.install_app(app_path)
time.sleep(5) # 要知道即将卸载的APP的包名
bundle_id = "com.taobao.taobao"
result = driver.is_app_installed(bundle_id)
# 结果是result=true
print(result) # 5.关闭APP
time.sleep(3)
driver.quit()

提示:一般我们用眼看APP是否安装就可以了,脚本中明确需要的时候再写。

4、关闭APP软件和关闭驱动对象

关闭APP软件和关闭驱动对象的区别:

  • driver.close_app()

    闭当前操作的APP,不会关闭驱动对象。

  • driver.quit()

    关闭驱动对象,同时关闭所有关联的APP。

5、发送文件到手机和获取手机中的文件

(1)发送文件到手机

代码片段:

# 导入base64库
import base64 # 将文件转换成二进制文件
with open(file_path,'rb') as fp:
data = str(base64.b64encode(fp.read()),'utf-8')
# print(data) # 将转换格式的文件发送到手机
driver.push_file(path, data)

参数说明:

  • file_path:需要上传的文件路径。
  • path:手机设备上的路径(例如:/sdcard/a.txt)
  • data:文件内数据,要求base64编码。

说明:

Python3.x中字符都为unicode编码,需要先导入base64库进行编码和解码,先把文件转成base64格式的二进制文件,然后进行文件传递到手机,因为设备之间传递是二进制的。

(2)从手机中拉取文件

代码片段:

import base64

# 返回数据为base64编码的数据
data = driver.pull_file(path) # base64解码
with open('a.txt','wb') as fp:
fp.write(base64.b64decode(data))

参数:

path:手机设备上的路径例如: /sdcard/a.txt

(3)示例:

# 1.导入appium
import time
from appium import webdriver
import base64 # 2.创建Desired capabilities对象,添加启动参数
desired_caps = {
"platformName": "Android", # 系统名称
"platformVersion": "7.1.2", # 系统版本
"deviceName": "127.0.0.1:21503", # 设备名称
"appPackage": "com.cyanogenmod.filemanager", # APP包名
"appActivity": ".activities.NavigationActivity" # APP启动名
} # 3.启动APP
# 声明手机驱动对象(实例化webdriver)
# 第一个参数为appium服务的地址,需要启动appium服务。
# 第二个参数为Desired capabilities对象
# 我们就先传入这两个参数就可以了。
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP # 4.1 发送文件到手机
file_path = r'C:\Users\L\Desktop\test.txt' # 将文件转换成二进制文件
with open(file_path, 'rb') as fp:
data = str(base64.b64encode(fp.read()), 'utf-8')
# print(data) # 将转换格式的文件发送到手机
path = r'/sdcard/test.txt'
driver.push_file(path, data) # 4.2 从手机中拉取文件到电脑上
# 手机中文件的路径
path_app = '/sdcard/test.txt'
# 返回数据为base64编码的数据
data = driver.pull_file(path_app) print(data) # base64解码
with open('test.txt', 'wb') as fp:
fp.write(base64.b64decode(data)) # 提示:该文件会拉取到脚本文件所在的目录中 # 5.关闭APP
time.sleep(5)
driver.quit()

6、获取当前屏幕内元素结构(重点)

(也就是获取当前屏幕的源码)

使用的API:

driver.page_source

作用:
返回当前页面的文档结构,可以为后续判断特定的元素是否存在提供前提。

示例:

# 1.导入appium
import time
from appium import webdriver # 2.创建Desired capabilities对象,添加启动参数
desired_caps = {
"platformName": "Android", # 系统名称
"platformVersion": "7.1.2", # 系统版本
"deviceName": "127.0.0.1:21503", # 设备名称
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP启动名
} # 3.启动APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP
# 获取当前页面源码
# 只是设置首页中的页面源码
source = driver.page_source
# # print(source) # 将APP的页面源码保存到一个文件中
with open("source.txt", "w", encoding="UTF-8") as fp:
fp.write(source) # 5.关闭APP
time.sleep(3)
driver.quit()

7、脚本内启动其他APP

使用的API:

driver.start_activity(appPackage,appActivity)

# 提示:appPackage,appActivity为所要启动APP的包名和启动名

示例:

# 从管理app页面中打开文件管理器app

# 1.导入appium
import time
from appium import webdriver # 2.创建Desired capabilities对象,添加启动参数
desired_caps = {
"platformName": "Android", # 系统名称
"platformVersion": "7.1.2", # 系统版本
"deviceName": "127.0.0.1:21503", # 设备名称
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP启动名
} # 3.启动APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP
# 从设置APP页面启动文件管理器APP
time.sleep(3) # 先用adb命令获取文件管理器的包名和启动名
# com.cyanogenmod.filemanager/.activities.NavigationActivity
driver.start_activity("com.cyanogenmod.filemanager", ".activities.NavigationActivity") # 5.关闭APP
time.sleep(3)
driver.quit()

8、将应用程序置于后台运行(重点)

使用的API:

# 将应用置于后台运行(秒)
driver.background_app()

示例:

# 1.导入appium
import time
from appium import webdriver # 2.创建Desired capabilities对象,添加启动参数
desired_caps = {
"platformName": "Android", # 系统名称
"platformVersion": "7.1.2", # 系统版本
"deviceName": "127.0.0.1:21503", # 设备名称
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP启动名
} # 3.启动APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP
time.sleep(3)
# 将设置APP置于后台运行
# 将应用在后台运行5秒,返回前台
driver.background_app(5) # 提示:测试前最好把设备中所有后台运行的APP都关闭掉。 # 5.关闭APP
time.sleep(3)
driver.quit()

提示:在测试APP热启动的时候,就会常用到该命令。

『与善仁』Appium基础 — 16、APPium基础操作API的更多相关文章

  1. 『与善仁』Appium基础 — 10、Appium基本原理

    目录 1.Appium自动化测试架构 2.Appium架构图 3.Session说明 4.Desired Capabilities说明 5.Appium Server说明 6.Appium Clien ...

  2. 『与善仁』Appium基础 — 12、Appium的安装详解

    目录 (一)Appium server安装 方式一:(桌面方式:推荐) 1.Appium Desktop下载 2.Appium Desktop安装 3.Appium Desktop使用 方式二:(No ...

  3. 『与善仁』Appium基础 — 14、Appium测试环境搭建

    目录 1.Appium测试环境搭建整体思路 (1)Android测试环境搭建 (2)Appium测试环境搭建 (3)测试脚本语言的环境搭建 2.Appium在Android端和IOS端的工作流程 (1 ...

  4. 『与善仁』Appium基础 — 15、使用Appium的第一个Demo

    我们使用Python语言作为测试脚本的编写语言. 执行脚本前提: Android模拟器或者手机是开机状态. 使用确保电脑和Android设备进行了链接. 也就是使用ADB命令adb connect链接 ...

  5. 『与善仁』Appium基础 — 18、元素定位工具(二)

    目录 1.Appium Inspector介绍 2.Appium Inspector打开方式 3.Appium Inspector布局介绍 4.Appium Inspector工具的配置 5.Appi ...

  6. 『与善仁』Appium基础 — 22、获取元素信息的操作(一)

    目录 1.获取元素文本内容 (1)text()方法 (2)get_attribute()方法 (3)综合练习 2.获取元素在屏幕上的坐标 1.获取元素文本内容 (1)text()方法 业务场景: 进入 ...

  7. 『与善仁』Appium基础 — 26、常用手机操作的API说明

    目录 1.获取当前手机的时间 2.获取手机屏幕的宽和高 3.获取手机当前网络 4.设置手机网络模式 5.操作手机通知栏 6.综合练习 7.发送键到设备(掌握) 8.手机截图(掌握) 是针对手机一些常用 ...

  8. 『与善仁』Appium基础 — 8、Appium自动化测试框架介绍

    目录 1.主流的移动端自动化测试框架 (1)Robotium (2)Macaca (3)Appium 2.自动化测试工具的选择 3.Appium简介 提示:我们前面说的Android环境搭建和adb命 ...

  9. 『与善仁』Appium基础 — 5、常用ADB命令(二)

    目录 9.查看手机运行日志 (1)Android 日志 (2)按级别过滤日志 (3)按 tag 和级别过滤日志 (4)日志格式 (5)清空日志 10.获取APP的包名和启动名 方式一: 方式二: 11 ...

随机推荐

  1. hdu 1847 Good Luck in CET-4 Everybody! (简单博弈)

    题意: n张牌,双方轮流抓取.每人每次抓取的牌数必须是2的幂次(1,2,4,8...). 最后抓完的人胜. 思路 : 考虑剩3张牌,后手胜. 考虑3的倍数.假设先抓者当轮抓2x 张,2x %3等于1或 ...

  2. linux 内核源代码情景分析——几个重要的数据结构和函数

    页面目录PGD.中间目录PMD和页面表PT分别是由表项pgd_t.pmd_t和pte_t构成的数组,而这些表项都是数据结构 1 /* 2 * These are used to make use of ...

  3. SpringCloud微服务实战——搭建企业级开发框架(十二):OpenFeign+Ribbon实现负载均衡

      Ribbon是Netflix下的负载均衡项目,它主要实现中间层应用程序的负载均衡.为Ribbon配置服务提供者地址列表后,Ribbon就会基于某种负载均衡算法,自动帮助服务调用者去请求.Ribbo ...

  4. 自动化SQL注入工具 sqlmap 使用手册

    0x00 sqlmap介绍 什么是sqlmap? sqlmap是一个开源的渗透测试工具,它自动化了检测和利用SQL注入缺陷 以及接管数据库服务器的过程.它配备了一个强大的检测引擎 ,以及终极渗透测试仪 ...

  5. Emmet语法 —— 快速生成HTML结构

    快速生成HTML结构语法 1.生成单个标签 : 标签名+tab,比如 div 然后tab 键, 就可以生成 <div></div> 2.生成多个相同标签 div*3 + tab ...

  6. git删除未被追踪的文件

    # 先看看会删掉哪些文件,防止重要文件被误删 git clean -n # 删除 untracked files git clean -f # 连 untracked 的目录也一起删掉 git cle ...

  7. PTA 银行排队问题之单队列多窗口服务 (25分)

    PTA 银行排队问题之单队列多窗口服务 (25分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选 ...

  8. Intellij IDEA 内存设置的问题 及解决

    在IDEA上运行较大项目时,编译量很大,可能会报出 Error:java: java.lang.OutOfMemoryError: Java heap space 的错误,解决方法如下:java.la ...

  9. CODING添加ssh提示格式错误的问题

    不能去.shh文件夹打开id_rsa.pub文件查看 解决方法: 进入.ssh文件夹,然后右键git bash here 输入代码 cat id_rsa.pub 回车即可

  10. selenium的 元素定位、元素信息、交互

    selenium的元素定位? 元素定位:自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,点击.输入等等.操作这些元素前首先 要找到它们,WebDriver提供很多定位元素的方法 方法: 1.fin ...