Appium常用API
1.会话API
启动会话
desired_caps = {}
desired_caps["platformName"]="Android"
desired_caps["platformVersion"]="5.1.1"
desired_caps["deviceName"]="device"
desired_caps["appPackage"]="com.xxzb.fenwoo"
desired_caps["appActivity"]="com.xxzb.fenwoo.activity.addition.WelcomeActivity"
或者
desired_caps = {
"platformName":"Android",
"platformName":"Android",
"deviceName":"device",
"appPackage":"com.xxzb.fenwoo",
"appActivity":"com.xxzb.fenwoo.activity.addition.WelcomeActivity"
}
关闭会话
self.driver.quit()
2.状态信息
current_activity
//得到当前正在运行的activity
activity = driver.current_activity
print(activity)
我们可以用此API在某些场景进行断言:是否当前activity符合我们的预期等。
page_source
//得到当前页面的结构图
source = driver.page_source
print(source)
可以用于判断当前页面是否有某个元素,或者判断当前页面有没有产生变化:如上下滚动判断是否已经到达了顶端/底端。
Capabilities
//得到当前的deviceName的配置信息,还可以通过该方法得到其余的配置,如platformVersion、appPackage等
caps = driver.capbilities
devices = caps.get("deviceName")
其他信息获取类API
//获取设备时间信息
driver.device_time
3. 安装卸载启动API
reset()
//重置应用数据,有些场景我们需要清除应用数据,相当于第一次安装时候的状态,比如,第一次启动App时的引导页,登录等等
driver.reset()
Start_activity()
//开启某个activity,实现跳转
driver.start_activity("com.lemon.lemonban","com.lemon.lemonban.activity.MainActivity")
Is_app_installed()
//检测某个App是否安装,返回true/false,Android中是包名,IOS中是BundleID。
driver.is_app_installed("com.lemon.lemonban")
Install_app()
//安装app
driver.install_app("lemonban_release.apk")
Close_app()
//一般我们在测试结束后,比如tearDown方法中去调用执行
driver.close_app()
4.元素操作API
Get_attribute
//得到class属性
elment.get_attribute("class")
clear()
//清除输入框的数据,对其他类型的元素没有影响
element.clear();
swipe()
通过传递坐标信息即可完成滑动
#startx,starty 起始点坐标的x,y轴值
#endx,endy 中点坐标的x,y轴值
#duration 从起始点到终止点的滑动时间
driver.swipe(startx,stary,endx,endy,duration)
在实际操作中,我们可以:
- 先获取设备的屏幕大小(宽和高)
- 再设置滑动的距离与屏幕大小的百分比
get_window_size :返回窗口的宽和高
- 调用滑动接口执行滑动操作。
zoom() & pinch()
zoom:放大,pinch:缩小
默认放大或缩小一倍。参数percent表示放大和缩小的倍数,默认为200
#传入WebElement类型的参数完成放大
driver.zoom(element)
driver.pinch(element)
zoom(x,y)方法其实是由两个MultiTouchAction实现的,首先根据你传入的坐标地点确定偏移量,然后创建两个action分别向反方向移动,同时间释放。
pinch同zoom相反。
tap
tap和click比较:对于只有一个finger操作和click行为相同,如果超过一只finger那就不同。
并且tap可以模拟双击事件,click点击的时候是点击控件的中心点坐标:
//positions:点击的坐标。多个手指则将多个坐标储存在列表中。
//duration:点击的时间间隔
driver.tap([(100,200),(100,60),(100,100)],500)
5.其他API
pressKeyCode()
Android特有,appium扩展了pressKeyCode方法,使得可以通过脚本发送这些事件:
//按下电源键事件
driver.pressKeyCode(26)
其中26是电源键的键值。
详细的按键信息地址:
http://developer.android.com/reference/android/view/KeyEvent.html
Get_screenshot_as_file()
如测试用例执行失败,我们可能需要截图保存在测试报告中,通过此方法就可以获取到运行失败时的错误截图:
//截图
Driver.get_screenshot_as_file("D:\image.png")
background_app
将当前的应用切换到后台,然后可以让其在指定时间内回到前台,或者让它一直留在后台。
传递给这个方法的参数有两种类型:
一个整型(秒):表示后台状态维持多久。-1表示持续置于后台。
一个看起来像{“timeout”:secs}的对象。里面的secs是含义和第一个类型一样的整型数字(即表示置于后台持续多少秒),或者为null(表示持续置于后台)。
示例:
driver.background_app(5) #置于后台,持续5s
driver.background_app(-1) #持续置于后台
driver.background_app({"timeout":None) #持续置于后台
示例:前程贷app引导页滑动进入首页
from appium import webdriver
import time
#1.安卓设备信息:
desired_caps = {
"platformName":"Android",
"platformName":"Android",
"deviceName":"device",
"appPackage":"com.xxzb.fenwoo",
"appActivity":"com.xxzb.fenwoo.activity.addition.WelcomeActivity"
}
#2.启动appium
#3.连接appium服务器,告诉appium要在哪个设备上运行哪个程序
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
#休息5秒
time.sleep(5)
#app退到后台5s
driver.background_app({"timeout":5})
#休息5s
time.sleep(10)
#滑动到主页
#欢迎页面的左右滑动(右划)
def getSize():
width = driver.get_window_size()["width"] #获取屏幕宽的值
height = driver.get_window_size()["height"] #获取屏幕高的值
return (width,height)
#右划,x值从小到大
def swipe_right(driver,size):
driver.swipe(size[0]*0.1,size[1]*0.5,size[0]*0.85,size[1]*0.5,500) #从x轴0.1位置滑动到0.85位置,y轴保持0.5不变,滑动时间为500ms。
#左滑,x值从大到小
def swipe_left(driver,size):
driver.swipe(size[0]*0.85,size[1]*0.5,size[0]*0.1,size[1]*0.5,500)
size = getSize()
print(size)
#左滑三次
for index in range(0,3):
print("======swipe left======")
swipe_left(driver,size)
time.sleep(2)
#立即体验
driver.find_element_by_id("com.xxzb.fenwoo:id/btn_start").click()
time.sleep(5)
6.特殊场景元素定位操作
九宫格滑动解锁操作实践
TouchAction类:
将一系列的动作放在一个链条中,然后将该链条传递给服务器,服务器接收到该链条后,解析哥各个动作,逐个执行。
press 按压
longpress 长按
tap 点击
move_to 移动
wait 等待
release 松开(按压之后松开)
perform 执行前面链条的操作
cancel 取消前面链条的所有操作