Appium自动化测试框架3

滑动与拖拽

swipe

滑动时间的长短会影响最后的结果的

是有一定误差的

from appium import webdriver
import time
# 启动一个字典 包装相应的启动参数
desired_caps = dict()
# 平台的名字,安卓还是IOS 大小写无所谓
desired_caps['platformName'] = 'Android'
# 平台的版本,(5.4.3 可以写 5.4.3 5.4 5)
desired_caps['platformVersion'] = '7.1.2'
# 设备的名字,随便写,不能乱写
desired_caps['deviceName'] = 'samsung'
# 要打开的应用程序 包名
desired_caps['appPackage'] = 'com.android.settings'
# 要打开的界面 启动名 界面名
desired_caps['appActivity'] = '.Settings'# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)driver.swipe(100,2000,100,1000)driver.swipe(100,2000,100,100)# 以毫秒为单位 5s 持续时间越长 惯性越小 就不会因为惯性而继续往后滑一点
driver.swipe(100,2000,100,100,5000)time.sleep(20)
driver.quit()

为什么每次运行滑动的时候会有一些误差

对于time.sleep(5) 真实情况下可能会比5秒多一丢丢 

scroll

直到页面自动停止 即有惯性还会继续滑动 等其停止

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
# 启动一个字典 包装相应的启动参数
desired_caps = dict()
# 平台的名字,安卓还是IOS 大小写无所谓
desired_caps['platformName'] = 'Android'
# 平台的版本,(5.4.3 可以写 5.4.3 5.4 5)
desired_caps['platformVersion'] = '7.1.2'
# 设备的名字,随便写,不能乱写
desired_caps['deviceName'] = 'samsung'
# 要打开的应用程序 包名
desired_caps['appPackage'] = 'com.android.settings'
# 要打开的界面 启动名 界面名
desired_caps['appActivity'] = '.Settings'# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)save = driver.find_element(AppiumBy.XPATH,"//*[@text='蓝牙']")
more = driver.find_element(AppiumBy.XPATH,"//*[@text='通知']")driver.scroll(save,more)

drag_and_drop

# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)save = driver.find_element(AppiumBy.XPATH,"//*[@text='蓝牙']")
more = driver.find_element(AppiumBy.XPATH,"//*[@text='通知']")driver.drag_and_drop(save,more)

TouchAction高级手势

创建对象 通过对象调用想要执行的方法 通过perform执行

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
from appium.webdriver.common.touch_action import TouchAction
# 启动一个字典 包装相应的启动参数
desired_caps = dict()
# 平台的名字,安卓还是IOS 大小写无所谓
desired_caps['platformName'] = 'Android'
# 平台的版本,(5.4.3 可以写 5.4.3 5.4 5)
desired_caps['platformVersion'] = '7.1.2'
# 设备的名字,随便写,不能乱写
desired_caps['deviceName'] = 'samsung'
# 要打开的应用程序 包名
desired_caps['appPackage'] = 'com.android.settings'
# 要打开的界面 启动名 界面名
desired_caps['appActivity'] = '.Settings'# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 传入元素
e1 = driver.find_element(AppiumBy.XPATH,"//*[@text='WLAN']")
TouchAction(driver).tap(e1).perform()
# 传入坐标 要x= y= 显示指定
TouchAction(driver).tap(x=650,y=650).perform()

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
from appium.webdriver.common.touch_action import TouchAction
# 启动一个字典 包装相应的启动参数
desired_caps = dict()
# 平台的名字,安卓还是IOS 大小写无所谓
desired_caps['platformName'] = 'Android'
# 平台的版本,(5.4.3 可以写 5.4.3 5.4 5)
desired_caps['platformVersion'] = '7.1.2'
# 设备的名字,随便写,不能乱写
desired_caps['deviceName'] = 'samsung'
# 要打开的应用程序 包名
desired_caps['appPackage'] = 'com.android.settings'
# 要打开的界面 启动名 界面名
desired_caps['appActivity'] = '.Settings'# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)TouchAction(driver).press(x=650,y=650).perform()
time.sleep(2)# 不会进去
TouchAction(driver).press(x=650,y=650).perform()
time.sleep(2)# 得先按下的操作再抬起 不然会报错
TouchAction(driver).press(x=650,y=650).release().perform()
time.sleep(2)driver.quit()

等待操作 暂停操作

# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)el = driver.find_element(AppiumBy.XPATH,"//*[@text='WLAN']")
TouchAction(driver).tap(el).perform()
time.sleep(2)el2 = driver.find_element(AppiumBy.XPATH,"//*[@text='WiredSSID']")
# 无等待
TouchAction(driver).press(el2).release().perform()
# 等待2秒钟 相当于长按的效果
TouchAction(driver).press(el2).wait(2000).release().perform()

 无停留效果

停留效果:

 

# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)el = driver.find_element(AppiumBy.XPATH,"//*[@text='WLAN']")
TouchAction(driver).tap(el).perform()
time.sleep(2)el2 = driver.find_element(AppiumBy.XPATH,"//*[@text='WiredSSID']")
TouchAction(driver).long_press(el2,duration=2000).perform()

 

 

 

移动操作

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
from appium.webdriver.common.touch_action import TouchAction
# 启动一个字典 包装相应的启动参数
desired_caps = dict()
# 平台的名字,安卓还是IOS 大小写无所谓
desired_caps['platformName'] = 'Android'
# 平台的版本,(5.4.3 可以写 5.4.3 5.4 5)
desired_caps['platformVersion'] = '7.1.2'
# 设备的名字,随便写,不能乱写
desired_caps['deviceName'] = 'samsung'
# 要打开的应用程序 包名
desired_caps['appPackage'] = 'com.android.settings'
# 要打开的界面 启动名 界面名
desired_caps['appActivity'] = '.ChooseLockPattern'# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)TouchAction(driver).press(x=176,y=773).move_to(x=448,y=768).move_to(x=720,y=773).release().perform()
time.sleep(10)
driver.quit()

可以应用在图形手势密码时  

手机操作API

获取手机分辨率:

# 获取当前分辨率
print(driver.get_window_size())
# {'width': 900, 'height': 1600}
print(driver.get_window_size()['height'])

获取手机截图:

# 截图 文件路径
driver.get_screenshot_as_file("screen.png")

 获取和设置手机网络:

print(driver.network_connection) # 6
driver.set_network_connection(1)

 

做一个功能 当网络设置为data only的时候 提醒

导包:from appium.webdriver.connectiontype import ConnectionType

if driver.network_connection == ConnectionType.DATA_ONLY:print('1')
else:print('0')

发送键到设备

就是手机上的外部按键 !!

音量键 + 24 - 25

driver.press_keycode(24)
sleep(2)
driver.press_keycode(24)
sleep(2)
driver.press_keycode(25)
sleep(2)
driver.press_keycode(25)

打开通知栏:

driver.open_notifications()
sleep(2)
driver.press_keycode(4)driver.quit()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/369005.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【串口通信】之TTL电平

1. 什么是串口 串口,全称为串行通信端口,是一种计算机硬件接口,用于实现数据的串行传输。与并行通信不同,串口通信一次只传输一个比特,数据通过串行线按顺序传输。串口通信在嵌入式系统、工业控制、计算机与外围设备通信等领域非常常见 2. 什么是串口通信 串口通信是指通过…

Docker 部署 Minio 对象存储服务器

文章目录 Github官网文档简介dockerdocker-compose.ymlmc 客户端mc 基础命令Golang 示例创建 test 账号密钥文件上传示例 Github https://github.com/minio/minio 官网 https://min.io/https://www.minio.org.cn/ 文档 https://www.minio.org.cn/docs/minio/kubernetes/up…

刚办理的手机号被停用,你可能遇到这些问题了!

很多朋友都会遇到手机号被停用的情况,那么你知道你的手机号为什么会被停用吗?接下来,关于手机号被停用的问题,跟着小编一块来了解一下吧。 ​停机的两种形态: 1、第一个是局方停机,即语音、短信和流量都不…

C++|哈希应用->布隆过滤器

目录 一、概念 二、模拟实现 三、布隆过滤器扩展应用 上一篇章学习了位图的使用,但它只适用于整数,对于要查询字符串是否在不在,位图并不能解决。所以针对这一问题,布隆过滤器可以派上用场,至于布隆过滤器是什么&am…

Java支付宝沙箱支付环境配置及简单测试

Java支付宝沙箱环境配置(测试) 1. 沙箱配置环境 沙箱应用 - 开放平台 (alipay.com) 2. 需要用到的基本信息 3. Pom文件添加依赖 <!--支付宝依赖 --><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-easysdk</artifactId…

周鸿祎:大模型不是风口和泡沫,将引领新工业革命

7月2日&#xff0c;2023全球数字经济大会人工智能高峰论坛举行。360集团创始人周鸿祎在论坛发表《构建“安全可信可控易用”的企业级AI大模型》主题演讲。他表示&#xff0c;大模型不是风口和泡沫&#xff0c;将引领新工业革命。在城市、行业、企业数字化转型到智能化的过程中&…

#### golang中【堆】的使用及底层 ####

声明&#xff0c;本文部分内容摘自&#xff1a; Go: 深入理解堆实现及应用-腾讯云开发者社区-腾讯云 数组实现堆 | WXue 堆&#xff08;Heap&#xff09;是实现优先队列的数据结构&#xff0c;Go提供了接口和方法来操作堆。 应用 package mainimport ("container/heap&q…

C++:类型转换

目录 一、C语言中的类型转换 二、为什么C要新的转换格式 三、 C强制类型转换 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast 一、C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&…

Land survey boundary report (template)

Land survey boundary report (template) 土地勘测定界报告&#xff08;模板&#xff09;.doc

可视化学习之pytorch可视化工具visdom

文章摘自详解PyTorch可视化工具visdom&#xff08;一&#xff09;-CSDN博客 模型训练过程中需要实时监听并可视化一些数据&#xff0c;如损失值loss&#xff0c;正确率acc等。在tensorflow中&#xff0c;使用的工具为tensorboard&#xff1b; 安装一下试试 1.安装 pip inst…

Android的课程学习助手APP-计算机毕业设计源码19307

基于Android的课程学习助手APP 摘 要 在数字化、信息化的时代背景下&#xff0c;移动学习已成为现代教育发展的重要趋势。为了满足广大学生对高效、便捷学习方式的迫切需求&#xff0c;一款基于Android平台的课程学习助手APP应运而生。这款APP巧妙地将先进的信息技术与学习体验…

通过一个单相逆变器仿真深度学习PR控制器

目录 前言 ​编辑 PR控制器的理论 PR控制器不同表达式及其建模 PR控制器连续积分组合及模型 PR控制器连续传递函数及模型 PR控制器离散积分及模型 PR控制器离散传递函数及模型 PR控制器差分方程及模型 系统仿真效果 总结 前言 在项目开发中常用PI控制器&#xff0c;这次在…

解读 Amazon Q | 用 AI 聊天机器人连接你与未来的无限可能

在美国当地时间11月28日&#xff0c;亚马逊云科技在拉斯维加斯举办了 re:Invent 大会&#xff0c;大会介绍了许多今年来新增的核心产品与功能&#xff0c;着重讲解了生成式 AI 引领人工智能未来的前进方向&#xff0c;亚马逊作为云计算领域的龙头&#xff0c;相信会继续给我们的…

基于路径长度的样条插补算法(自动驾驶和路径跟踪控制适用)

以前在做车辆跟踪控制的时候发现在针对有多个X和多个Y对应的路径插补时候&#xff0c;总是报错&#xff0c;因为MATLAB里面的interp1插补函数它要求x要唯一对应一个y&#xff0c;当路径以单独的x或者y来求插补时候的时候就报错。由于在使用Matlab的interp1函数进行插值时&#…

重生之算法刷题之路之链表初探(三)

算法刷题之路之链表初探&#xff08;三&#xff09; 今天来学习的算法题是leecode2链表相加&#xff0c;是一道简单的入门题&#xff0c;但是原子在做的时候其实是有些抓耳挠腮&#xff0c;看了官解之后才恍然大悟&#xff01; 条件 项目解释 有题目可以知道&#xff0c;我们需…

C#Modbus专题

1&#xff0c;辅助工具。 1&#xff0c;虚拟串口工具&#xff08;vspd.exe&#xff09; 2&#xff0c;Modubus模拟主站(Modbus Poll) 3&#xff0c;Modbus模拟从站(Modbus Slave) 4&#xff0c;OPC服务软件(KEPServerEx V4.0)。 下载链接&#xff1a;https://download.csdn.n…

Redisson框架

1. Redisson锁与Redis订阅与发布模式的联系&#xff1a; Redisson锁中&#xff0c;使用订阅发布模式去通知等待锁的客户端&#xff1a;锁已经释放&#xff0c;可以进行抢锁。 publish channel_name message&#xff1a;将消息发送到指定频道 解锁时&#xff0c;在Lua解锁脚本…

算法思想总结:优先级队列

一、最后一块石头的重量 . - 力扣&#xff08;LeetCode&#xff09; 我们每次都要快速找到前两个最大的石头进行抵消&#xff0c;这个时候用优先级队列&#xff08;建大堆&#xff09;,不断取堆顶元素是最好的&#xff01;每次删除堆顶元素后&#xff0c;可以自动调整&#xf…

[C++][CMake][CMake基础]详细讲解

目录 1.CMake简介2.大小写&#xff1f;3.注释1.注释行2.注释块 4.日志 1.CMake简介 CMake是一个项目构建工具&#xff0c;并且是跨平台的 问题 – 解决 如果自己动手写Makefile&#xff0c;会发现&#xff0c;Makefile通常依赖于当前的编译平台&#xff0c;而且编写Makefile的…

【动态规划】动态规划一

动态规划一 1.第 N 个泰波那契数2.面试题 08.01. 三步问题3.使用最小花费爬楼梯4.解码方法 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.…