zoukankan      html  css  js  c++  java
  • appium自动化测试- 元素操作

    本文转自:https://www.cnblogs.com/sinder2018/articles/9699801.html

    一、滑动屏幕

    1、appium - 滑动屏幕

    滑动接口:

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

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

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

    Q:手机的屏幕有很多,如何兼容?

    2、appium - 上下左右滑动屏幕

    原理:

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

    2、在设置滑动的距离与屏幕大小的百分比。

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

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

    get_window_size:返回窗口的宽和高

    滑动接口:

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

    二、appium - 模拟触屏

    TouchAction类:

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

    短按(press)

    长按(longPress)

    点击(tap)

    移动到(move_to)  x,y相对上一个坐标的移动位置

    等待(wait)

    释放(release)

    执行(perform)

    取消(cancel)

    三、安装/卸载/关闭/启动

    启动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="same 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)#置于后台,持续5秒

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

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

    六、打开通知栏/摇一摇

    打开通知栏:

      仅支持Android。

      driver.open_notifications()

    摇一摇:

      模拟摇晃设备的操作:

      driver.shake()

    七、手势操作

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

    driver.pinch(element=el)

    放大屏幕(Zoom):在屏幕上使用放大手势

    driver.zoom(element=el)

    flick(self,start_x,start_y,end_x,end_y,):从屏幕A点快速滑动到B点

    drag_and_drop(self,origin_el,destination_el):把控件origin_el拖拽到destination_el的位置

    八、按键操作

    按键发送(Android)

    driver.press_keycode(键的keycode)

     

    九、上下文切换

    1、可用的上下文(Contexts)

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

    driver.contexts

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

    driver.current_context

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

    切换回默认的上下文(context).(译者注:一般就是原生上下文“native_app")

    driver.switch_to.context(None)

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

    driver.current_activity

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

    driver.current_package

    十、H5识别 - webview

    tips:

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

    2、在开发者选项中勾选上显示布局界面

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

    adb shell dumpsys activity | find "mFocusedActivity" ----查看前台应用activity名

    十一、常见问题

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

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

    但是driver.contexts只打印出了"NATIVE_APP"

    解决方法:

    1、APP打包的时候需要开启webview的debug属性setWebContentDebuggingEnabled(true)

    这个直接让开发加上就好

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

  • 相关阅读:
    Spring MVC 入门示例讲解
    使用Word2013,发布博文到博客园
    走过2103,迈向2014
    C#中的字符串拼接@,$
    ORA-22922:nonexistent LOB value问题及listagg()函数
    证明一个数是不是存在于该数组中
    论java中System.arrayCopy()与Arrays.copyOf()的区别
    JSP中获取各种路径的方法
    JavaScript中变量声明有var和没var的区别
    JavaScript:理解事件循环
  • 原文地址:https://www.cnblogs.com/star12111/p/9989569.html
Copyright © 2011-2022 走看看