zoukankan      html  css  js  c++  java
  • appium自动化测试(三)

    一. 层级定位和list

    先通过find_element_by_XXX找到父级元素webelement,再通过webelement.find_element_by_XXX寻找子元素

    二. 滑动屏幕

    滑动接口:

    swipe(起始X,起始Y,结束X,结束Y)

    结束X - 起始X:X轴滑动的距离

    结束Y - 起始Y:Y轴滑动的距离

    Q:手机的屏幕尺寸有很多,如何兼容?进入app时的导航页面

    原理:

    1. 先获取设备的屏幕大小(宽、高)

    2. 再设置滑动的距离与屏幕大小的百分比

    3. 调用滑动接口执行滑动操作

    获取当前窗口大小的接口:

    get_window_size:返回窗口的宽和高

    滑动接口:

    swipe(起始X,起始Y,结束X,结束Y)

    实例:

     #获取屏幕尺寸
     size = self.driver.get_window_size()
     #swipe还有一个参数duration,单位是ms,防止操作过快
     #向左滑动
     self.driver.swipe(size["width"]*0.9, size["height"]*0.5, size["width"]*0.1, size["height"]*0.5, 200)
     #向右滑动
     self.driver.swipe(size["width"]*0.1, size["height"]*0.5, size["width"]*0.9, size["height"]*0.5, 200)

    多个屏幕需要滑屏时,最好在每个页面滑屏操作之后,利用time.sleep()稍微等待一下,防止操作过快

    三. 模拟触屏

    TouchAction类

    将一系列的动作放在一个链条中,然后将该链条传递给服务器。服务器接收到该链条后,解析各个动作,逐个执行

    短按(press)

    长按(longPress)

    点击(tap)

    移动到(move to)     x, y为相对上一个坐标的移动距离

    等待(wait)

    释放(release)

    执行(perform)

    取消(cancel)

    实例

    #引入TouchAction
    from appium.webdriver.common.touch_action import TouchAction
    
    ta = TouchAction(driver)
    #获取九宫格的起点坐标和大小
    ele = driver.find_element_by_id("com.xxzb.fenwoo:id/gesturepwd_create_lockview")
    #九宫格的大小
    size = ele.size
    #获取坐标:九宫格起点坐标
    start_point = ele.location
    #参数是元素或者坐标,没有元素取坐标,wait是为了防止操作过快,单位是ms,绘制九宫格最后要释放release()(即抬起),完成后要perform()
    ta.press(x=start_point["x"] + size["width"]*1/6, y=start_point["y"] + size["height"]*1/6).wait(200).
        move_to(x=size["width"]*2/6, y=0).wait(200).
        move_to(x=size["width"]*2/6, y=0).wait(200).
        move_to(x=-size["width"]*2/6, y=size["height"]*2/6).wait(200).
        move_to(x=0, y=size["height"]*2/6).wait(200).
        release().wait(200).
        perform()

    四. 多点触控

    MultiAction类,引入

    from appium.webdriver.common.multi_action import MultiAction

    五. 安装/卸载/关闭/启动

    启动Activity:

    driver.start_activity()

    在当前app打开一个activity,或者新打开一个应用并启动一个activity,仅支持Android

    安装应用:

    driver.install_app('path/to/my.apk')

    卸载应用:

    driver.remove_app('com.example.android.apis')

    关闭应用:

    driver.close_app()

    应用是否已安装:检测应用是否已被安装

    driver.is_app_installed('com.example.android.apis')

    六. 拉取/推送文件

    拉取(pull)文件

    从设备上拉取文件

    driver.pull_file('Library/AddressBook/AddressBook.sqlitedb')

    推送(push)文件

    推送文件到设备

    data = "some data for the file"

    path = "/data/local/tmp/file.txt"

    driver.push_file(path, data.encode('base64'))

    七. 锁定/将应用切换至后台

    锁定屏幕(IOS):

    driver.lock(秒)

    将应用切换至后台:

    background_app({"timeout": secs})

    将当前的应用切换到后台,然后可以让其在指定时间内回到前台,或者让它一直留在后台

    递给这个方法的参数有两种类型:

    一个整型(秒):表示后台状态维持多久。 -1表示持续置于后台。这种风格的参数已经被废弃

    一个看起来像("timeout": secs)的对象。里面的secs是含义和第一个类型一样的整型数字(即表示置于后台多少秒),或者为null(表示持续置于后台)

    driver.background_app(5)   #置于后台,持续5s

    driver.background_app(-1)   #持续置于后台

    driver.background_app({"timeout": None})    #持续置于后台

    driver.background_app({"timeout": 5})    #置于后台5s,5s后自动回到前台

    八. 打开通知栏/摇一摇

    打开通知栏:仅支持Android

    driver.open_notifications()

    摇一摇:模拟摇晃设备的操作

    driver.shake()

    九. 手势

    捏(Pinch)手势:缩小(默认缩小一倍)

    在屏幕上使用捏(Pinch)手势

    driver.pinch(element=el)

    放大屏幕(Zoom)(默认放大一倍)

    在屏幕上使用放大手势

    driver.zoom(element=el)

    scroll:滚动

    十. 按键操作

    按键发送(Android):

    driver.press_keycode(键的keycode)

    十一. 上下文切换

    可用的上下文(Contexts)

    列出所有可用的上下文(contexts)

    driver.contexts

    当前上下文(context):列出当前的上下文(context)

    driver.current_context

    切换至默认的上下文(context)

    切换回默认的上下文(context)  (注:一般就是原生上下文 "NATIVE_APP")

    driver.switch_to.context(None)

    当前Activity:获取当前的Activity。仅支持Android

    driver.current_activity

    当前包名(package):获取当前包名(package)。仅支持Android

    driver.current_package

    步骤:

    1. 识别——识别当前是否有webview视图,是否需要进入webview页面当中进行元素操作

    识别方式一:看class或者content-desc是否包含WebView字段

    方式二:

    tips:

    1) 在手机/模拟器中点击关于手机中的版本号5下,出来开发者选项

    2) 在开发者选项中勾选上显示布局边界

    3) 如果是html的界面,那界面不会有布局边界显示,如有则说明是native的界面

    2. 获取——获取所有的contexts: driver.contexts

    常见问题

    contexts只能获取NATIVE_APP,无法获取WEBVIEW

    使用uiautomatorview定位元素,显示class值为:android.webkit.WebView

    但是driver.contexts只打印了 'NATIVE_APP'

    解决办法:

    1) app打包的时候需要开放webview的debug属性 setWebContentDebuggingEnabled(true),这个直接让开发加上就好

    2) 模拟器的contexts中有webview,但有些手机没有,官方给出的答案是:需要将手机root,然后再去获取

    3. 切换——切换到webview视图: driver.switch_to.context(webview视图)

    4. 定位——定位webview中的元素,并执行操作:web网页元素定位和操作

    5. 切换——切换回默认的视图:driver.switch_to.context(None)

    参考文章

    https://blog.csdn.net/crisschan/article/details/50419963

  • 相关阅读:
    HTML5 实现Link跳线效果
    在TWaver的Tree节点上画线
    用TWaver加载大型游戏场景一例
    22万个木箱!TWaver 3D极限压榨
    如何在MONO 3D寻找最短路路径
    如何创建TWaver 3D的轮廓选中效果
    巧用TWaver 3D 矢量图形功能
    如何实现TWaver 3D颜色渐变
    HDU 1390 Binary Numbers
    HDU 1328 IBM Minus One
  • 原文地址:https://www.cnblogs.com/my_captain/p/9335398.html
Copyright © 2011-2022 走看看