• 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      取消前面链条的所有操作
    
    
  • 相关阅读:
    杭电dp题集,附链接还有解题报告!!!!!
    js正則表達式语法
    java界面编程(8) ------ 组合框(下拉列表)
    四个好看的CSS样式表格
    搜集朋友写的几篇Android Elf相关的文档
    hadoop编程小技巧(5)---自己定义输入文件格式类InputFormat
    递归算法
    ua识别(浏览器标识识别)
    amazeui学习笔记一(开始使用5)--藏品collections
    amazeui学习笔记一(开始使用4)--Web App 相关
  • 原文地址:https://www.cnblogs.com/xiaotufei/p/13338435.html
Copyright © 2020-2023  润新知