Appium学习笔记目录
本文包含内容
- appium session简介
- appium基础代码详解
- 实战示例
会话session
- Appium测试程序和Appium server之间的http请求都必须在一个session中进行
- 每次运行代码相当于开启了一个会话session
- 每个会话对应一个id,每一次的请求都会带上 session id
基本配置
1. desired_capabilities
01详解Appium server capabilities
02详解Appium server capabilities
这些键值对告诉appium server测试程序希望进行的是什么样的测试
desired_caps = {} # 定义字典:告诉appium我们的一些配置
desired_caps['platformName'] = 'Android' # 固定值
desired_caps['platformVersion'] = '8.1' # android版本
desired_caps['deviceName'] = 'test' # 连接多个设备时会用到 ?
desired_caps['app'] = r'/Users/liuhuaiyuan/Downloads/apk/toutiao.apk' # apk在电脑上的路径
desired_caps['appPackage'] = 'io.manong.developerdaily' # apk的package 通过aapt命令查找
desired_caps['appActivity'] = 'io.toutiao.android.ui.activity.LaunchActivity' # 指定apk的启动界面(通常启动界面是唯一的) 通过aapt命令查找
desired_caps['unicodeKeyboard'] = True # 安装中文输入法,以便于控制,及部分中文的输入
desired_caps['resetKeyboard'] = True # 针对上一条语句,如果手机还有其他的输入法,还原输入法,便于其他操作
desired_caps['noReset'] = True # 重要参数,=True 恢复默认值,=False(缺省值) 每次都是从刚安装app的状态进入(格式化状态),可能会显示欢迎页等
desired_caps['newCommandTimeout'] = 6000 # 设置等待时间,当超过这个时间时,将断开与appium的连接。单位是秒
-
通用参数
-
Android专用参数
-
Ios专用参数
2. 获取appPackage和appActivity
-
方式一:通过aapt命令获取
补充:Mac配置aapt环境变量方法- 通过aapt命令获取,aapt在sdk目录下的build-tools目录下
# aapt dump badging apk位置 # Mac: aapt dump badging /Users/用户名/Downloads/duoduoCalculators.apk # win: aapt dump badging F:\android_apk\jykl5.1.5test.apk
- 扩展
aapt dump badging F:\android_apk\jykl5.1.5test.apk >d:\info.txt && d:\info.txt
命令解释:输出到d:\info.txt 并打开此文件
- d:\info.txt 表示将前面的执行结果输出到d盘下的文件info.txt中
- &&表示如果前面的命令执行成功,则继续执行后面的命令(打开d盘下的文件info.txt)
-
查找package:name对应的值,即为appPackage的值
-
查找launchable-activity:name对应的值,即为appActivity的值
-
方式二:通过adb命令获取
adb shell pm list packages 如果想知道应用对应的apk文件在手机上的安装位置则可以在上面的命令后加-f参数 adb shell pm list packages -f 获取appActivityj adb shell dumpsys activity findstr "mFocusedActivity"
练习代码
# coding=utf8
from appium import webdriver
import time,traceback
desired_caps = {} # 定义字典:告诉appium我们的一些配置
desired_caps['platformName'] = 'Android' # 固定值
desired_caps['platformVersion'] = '8.1' # android版本
desired_caps['deviceName'] = 'test' # 连接多个设备时会用到 ?
desired_caps['app'] = r'/Users/liuhuaiyuan/Downloads/toutiao.apk' # apk在电脑上的路径
desired_caps['appPackage'] = 'io.manong.developerdaily' # apk的package 通过aapt命令查找
desired_caps['appActivity'] = 'io.toutiao.android.ui.activity.LaunchActivity' # 指定apk的启动界面(通常启动界面是唯一的) 通过aapt命令查找
desired_caps['unicodeKeyboard'] = True # 安装中文输入法,以便于控制,及部分中文的输入
desired_caps['resetKeyboard'] = True # 针对上一条语句,如果手机还有其他的输入法,还原输入法,便于其他操作
desired_caps['noReset'] = True # 重要参数,=True 恢复默认值,=False(缺省值) 每次都是从刚安装app的状态进入(格式化状态),可能会显示欢迎页等
desired_caps['newCommandTimeout'] = 6000 # 设置等待时间,当超过这个时间时,将断开与appium的连接。单位是秒
#启动Remote RPC
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps ) # 连接appium,并将参数(字典)传入,执行完此句后,与appium创建一个session
# 0.0.0.0:4723
try:
driver.implicitly_wait(10) # 隐式等待,每0.5秒查询一次,直到指定时间,结束。单位是秒
# 根据id找到元素,并点击,id和 html 元素的id不同
driver.find_element_by_id("io.manong.developerdaily:id/tab_bar_plus").click()
time.sleep(1)
# driver.find_element_by_id("io.manong.developerdaily:id/btn_email").click()
# time.sleep(1)
# 输入用户名、密码
# ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_email")
ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_phone")
ele.send_keys('XXXXXXXXX')
ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_password")
ele.send_keys('XXXXXXX')
time.sleep(2)
# 点击登录
driver.find_element_by_id('io.manong.developerdaily:id/btn_login').click()
pass
except:
print (traceback.format_exc())
input('**** Press to quit..')
driver.quit()