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.mzph.cn/pingmian/40631.shtml

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

相关文章

软考(高项)系统分析师--开篇

文章目录 前言一、学习过程:二、考试过程:总结: 前言 博客主在2024年05月22号参加了高项的系统分析师考试,在此进行一个经验总结以供小伙伴参考,如果想参考博客主学习资料的可以在下方留言进行交流。 一、学习过程: 先说下时间&…

2.5 C#视觉程序开发实例1----设计一个IO_Manager

2.5 C#视觉程序开发实例1----设计一个IO_Manager 第一步目标: 1 实现获取IO触发信号Trig0 2 能够实现程序切换 3 图像处理后能够输出一个脉冲 1 IO 引脚定义 1.1 输入信号定义 1.2 输出信号定义 2 IO时序图 2.1 触发时序 2.2 切换程序时序图 3 IO_Manager.cs …

半实物仿真测试系统

设备组成 test系统主要由硬件部分与软件部分组成。硬件部分由PCI机箱、PCI控制器以及各种PCI接口板卡组成。软件部分由测试设计软件模块、测试执行服务软件模块、测试执行客户端软件模块、设备资源管理软件模块等主要软件模块以及曲线数据生成、CRC插件生成与诊断、测试数据记录…

MPI hello world SSH 免密互联

目标: 我们想实现2台主机免密互联,将MPI Hello World跑起来 假设hostname是node01,node02,(Linux shell窗口一般是UserNameHostName,node1和node2一定要和HostName一样) hostname是/etc/hosts中的配置,如下…

阶段三:项目开发---大数据系统基础环境准备:任务1:准备系统运行的先决条件

任务描述 知识点: 大数据基础环境准备 重 点: SSH免密码连接 安装配置JDK 安装配置Scala 难 点: 无 内 容: 项目开发测试环境为分布式集群环境,在当前项目中使用多台基于CentOS 64bit 的虚拟机来模拟生产…

Kotlin和Java的一些不同点

1.Kotlin 的变量是没有默认值的(因此要求初始化),Java的成员变量是有默认值的 Java的成员变量: String name; // 默认值是 null int count; // 默认值是 0不过其实 Java 也只是成员变量有默认值,局部变量也是没有默…

Java 应用启动时出现编译错误进程会退出吗?

背景 开发的尽头是啥呢?超超级熟练工! 总结最近遇到的一些简单问题: Java 应用的某个线程,如果运行时依赖的 jar 不满足,线程是否会退出?进程是否会退出?Netty 实现 TCP 功能时,换…

机器学习10大算法

【机器学习】十大算法之一 “朴素贝叶斯” 【机器学习】十大算法之二 “K-means” 【机器学习】十大算法之三 “KNN” 【机器学习】十大算法之四 “SVM” 【机器学习】十大算法之五 “决策树” 【机器学习】十大算法之六 “随机森林” 【机器学习】十大算法之七 “线性回归” 【…

前后端分离:四种开发模式与实践指南

前后端分离:四种开发模式与实践指南 什么是前后端分离 当业务变得越来越复杂或产品线越来越多时,原有的开发模式就无法满足业务需求了。 产品越来越多,展现层的变化越来越快、越来越多,此时应该进行前后端分离的分层抽象&#…

IAST面面观 | 灰盒测试IAST与安全策略制定

灰盒测试IAST可实时监测和分析运行中的应用程序,准确发现安全漏洞和风险,为企业提供更全面、深入的安全洞察。然而,仅仅拥有先进的技术并不足以保障系统安全,合理有效的安全略才是将IAST价值最大化的关键,也能正确指导…

记录问题:解决vscode找不到Python自定义模块,报错No module named ‘xxx‘

1. 背景 我非要用vscode,不用pycharm,哼! 2. 问题 由于 import xx 自定义的模块, python run 的时候会报错 No module named ‘xxx‘ 报错信息: Traceback (most recent call last):File "d:\work\sf_financ…

基于opencv的斜光测距及python实现

1.前言 最近做了一个基于opencv的斜光测距的小项目,东西不多,但是很有意思,值得拿出来学一学。项目里面需要比较精确的定位功能,将前人matlab代码移植到python上,并且做了一些优化,简化逻辑(毕竟我是专业的…

pandas数据分析(7)

组合DataFrame 连接 如果只是要将多个DataFrame粘合在一起,那么concat函数是最佳选择。在默认情况下,concat会将DataFrame按行粘合在一起,同时会将各列自动对齐。 如果想要按列进行粘合,需要将axis设置为1: concat的特…

Nikto扫描器,扫描网站信息

Nikto 是一个功能强大的开源 Web 服务器扫描器,能够检测出 Web 服务器中的常见漏洞和配置错误。下面是如何安装和使用 Nikto 的步骤。 安装 Nikto 在 Ubuntu 22.04 上安装 Nikto: sudo apt update sudo apt install nikto使用 Nikto 进行扫描 基本扫描…

左耳听风_044_43_弹力设计篇之异步通讯设计

你好,我是陈浩网名做耳朵耗子。 在前面的课程中呢,我所说的隔离设计啊,通常都需要对系统做解耦设计,而把一个单体系统做解耦,不单单是要把业务功能拆分出来。 正如前面所说,拆分完之后呢,还会…

制造企业真的需要数字化转型吗?一文讲透:为何做,如何做?

此前拜访了不少制造企业,其以中小型企业居多,在与企业负责人交流数字化转型话题时,感触最多的还是管理者对“数字化转型”的认知。 在数字化转型方面从国家层面到地方政府进行大量的宣传与政策支持,部分行业头部企业也从数字化转…

百度出品_文心快码Comate提升程序猿效率

1.文心快码 文心快码包含指令、插件 和 知识三种功能, 1)指令包含Base64编码、Base64解码、JSON转TS类型、JSON转YAML、JWT解码喂JSON。 2)插件包含 3)指令包含如下功能: 官网链接

风控指标范围

摘要:每天学习一点金融小知识 不同的金融资产具有不同的金融属性,从资产管理角度出发,业务需要制定一系列的指标来对金融产品进行监管,指标维度的制定很多时候取决于金融产品自身的属性。

AI墓地:738个倒闭AI项目的启示

近年来,人工智能技术迅猛发展,然而,不少AI项目却在市场上悄然消失。根据AI工具聚合网站“DANG”的统计,截至2024年6月,共有738个AI项目停运或停止维护。本文将探讨这些AI项目失败的原因,并分析当前AI初创企…

C语言:结构体数组

结构体数组 介绍定义结构体定义结构体数组初始化结构体数组访问和修改结构体数组的元素遍历结构体数组 示例高级用法动态分配结构体数组使用 malloc 动态分配使用 calloc 动态分配 结构体数组作为函数参数结构体数组与指针多维结构体数组使用 typedef 简化结构体定义结构体数组…