一. 层级定位和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

appium自动化测试(三)的更多相关文章

  1. Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)

    简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...

  2. Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    简介 经过一段时间的准备,完善的差不多了,继续分享有关Appium自动化测试框架综合实践.想必小伙伴们有点等不及了吧! driver配置封装 kyb_caps.yaml 配置表 参考代码 platfo ...

  3. 你的第一个自动化测试:Appium 自动化测试

    前言: 这是让你掌握 App 自动化的文章 一.前期准备 本文版权归作者和博客园共有,原创作者:http://www.cnblogs.com/BenLam,未经作者同意必须在文章页面给出原文连接. 1 ...

  4. Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)

    1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...

  5. 全网最新方法:Win10下如何安装和搭建appium自动化测试环境

    为了方便大家,下面是本人安装和搭建appium所需要的软件,自取. 链接:https://pan.baidu.com/s/1wl5Xnos4BmnSZsBRd6B5YA#list/path=%2F  ...

  6. Appium自动化测试教程-自学网-adb命令

    adb命令: adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信.它可为各种设备操作提供便利,如安装和调试应用. T ...

  7. 全网最全最细的appium自动化测试环境搭建教程以及appium工作原理

    一.前言 ​ 对于appium自动化测试环境的搭建我相信90%的自学者都是在痛苦中挣扎,在挣扎中放弃,在放弃后又重新开始,只有10%的人,人品比较好,能够很快并顺利的搭建成功.appium 自动化测试 ...

  8. Python+Appium自动化测试(14)-yaml配置Desired capabilities

    一,前言 在之前的appium自动化测试示例中,我们都是把构造driver实例对象的数据(即Desired Capabilities)写在业务代码里,如下: # -*- coding:utf-8 -* ...

  9. Python+Appium自动化测试(6)-元素等待方法与重新封装元素定位方法

    在appium自动化测试脚本运行的过程中,因为网络不稳定.测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待 ...

随机推荐

  1. HTTP 常见状态码

    1. 以"1"开头(临时响应) 100: Continue,请求者应当继续提出请求;表示服务端已经收到请求的一部分,正在等待其余部分; 101: Switching Protoco ...

  2. mysql 客户端命令行下 直接查询并导出数据

    mysql原来还能这么导出数据,涨知识了. 方式1: select ....(sql语句) INTO OUTFILE   '/var/lib/mysql/msg_data.csv ' (导出的文件位置 ...

  3. Library Cache优化与SQL游标

    Library Cache主要用于存放SQL游标,而SQL游标最大化共享是Library Cache优化的重要途径,可以使SQL运行开销最低.性能最优. 1 SQL语句与父游标及子游标 在PL/SQL ...

  4. HTML5之概述

    HTML5是万维网的核心语言.标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改,是继HTML4.01和XHTML1.0之后的超文本标记语言的最新版本.它是由一群自由思想者组成的团 ...

  5. cdoj1324卿学姐与公主

    地址:http://acm.uestc.edu.cn/#/problem/show/1324 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others)     Memo ...

  6. Hadoop创始人Doug Cutting寄语2017:五种让开源项目成功的方法

    原文链接:http://www.infoq.com/cn/news/2017/01/Hadoop-2017-5-open-source?utm_source=tuicool&utm_mediu ...

  7. 笔记1:Jmeter工作原理及目录结构

    1.基本工作原理 发送request请求到服务器——获取目标服务的统计信息——生成不同格式的报告 2.完整的工作原理 Jmeter模拟用户并发进行性能测试——发送request到目标服务器——服务器返 ...

  8. linux比较两个文件的不同(6/21)

    cmp 命令:比较任意两个类型的文件,且吧结果输出到标准输出,默认文件相同不输出,不同的文件输出差异 必要参数 -c 显示不同的信息-l 列出所有的不同信息-s 错误信息不提示 选择参数 -i< ...

  9. xaml可扩展应用程序标记语言

    xaml 类似于 html,但不是html,它是基于xml语言的:’html可以呈现在浏览器中而xaml 可以现实 3d动画等特效. xaml  是强类型语言,  是解释性语言,虽然他可以被编译.

  10. 20145219 《Java程序设计》第08周学习总结

    20145219 <Java程序设计>第08周学习总结 教材学习内容总结 通用API 日志API 1.java.util.logging包提供了日志功能相关类与接口,使用日志的起点是log ...