3. appium常用api

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)

在实际操作中,我们可以:

  1. 先获取设备的屏幕大小(宽和高)
  2. 再设置滑动的距离与屏幕大小的百分比
get_window_size :返回窗口的宽和高
  1. 调用滑动接口执行滑动操作。

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      取消前面链条的所有操作

posted @ 2020-03-25 11:44  土匪哥的歌儿  阅读(86)  评论(0编辑  收藏  举报