涨薪技术 —— 搞定Appium工作中常见应用操作!

2024-04-28 20:36

本文主要是介绍涨薪技术 —— 搞定Appium工作中常见应用操作!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

Appium 是一个开源、跨平台的自动化测试工具,用于测试原生和轻量移动应用,支持 iOS, Android 和 FirefoxOS 平台。此工具在测试工作中也较长用到,接下来给大家介绍日常中的操作。

1、应用操作

1.1获取应用的包名和界面名

当我们从一个应用跳转到另外一个应用的时候,想输出其包名、界面名或者想在报告中展现对应信息, 我们就可以调用这个属性来进行获取。

# 打印当前包名print(driver.current_package)# 打印当前界面名print(driver.current_activity)

1.2 安装和卸载以及检查应用是否安装

安装应用:

driver.install_app(app_path) :安装应用到设备,需要apk包的路径

卸载应用:

driver.remove_app(app_id) :从设备中删除一个应用

检查应用是否安装:​​​​​​​

driver.is_app_installed(app_id) :检查应用是否已经安装。需要传入应用包的名字。返回结果为True或False

案例:​​​​​​​

# 如果计算器已经安装,就会卸载计算器。如果计算器没有安装,就会安装计算器。if driver.is_app_installed("com.youba.calculate"):driver.remove_app("com.youba.calculate")else:driver.install_app(r"F:\APP_packages\apks\calc.apk")#退出driverdriver.quit()

1.3 在脚本内启动其他应用

我们经常遇到需要从一个应用跳转到另外一个应用 ,就像我们使用饿了吗的时候,需要跳转到支付宝来进行支付一样。

我们想要实现这种功能,就要使用下面的方法了。​​​​​​​

driver.start_activity(appPackage, appActivity) :分别传入要打开的应用的包名和界面名。

实例:

打开《设置》,等待三秒后跳转到《通讯录》​​​​​​​

sleep(3)#跳转到短信driver.start_activity('com.android.contacts','.activities.PeopleActivity')sleep(5)#退出driverdriver.quit()

1.4 关闭应用​​​​​​​

driver.quit() 。但是这种关闭呢,是关闭驱动对象,同时关闭所有关联的应用,关闭后我们是无法使用脚本操作应用的。如果我们只想关闭当前操作的应用,不关闭驱动对象,我们就可以使用driver.close_app() 方法。若要终止某个指定的应用可以使用driver.terminate_app('app_id') ,需要传入app_id参数。

1.5 重置应用​​​​​​​

driver.reset()#重置应用,相当于“恢复出厂默认值”的效果,这个方法不需要传入参数

1.6 将应用置于后台​​​​​​​

driver.background_app(seconds) :app放置到后台一定时间后再回到前台,模拟热启动。这个方法需要传入一个时间,表示在后台停留多少秒

实例:

打开《设置》,进入后台五秒,再回到前台​​​​​​​

time.sleep(3)driver.background_app(5)time.sleep(3)# 退出driverdriver.quit()
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

2、滑动和拖拽

2.1 swipe滑动事件

从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动。​​​​​​​

driver.swipe(start_x, start_y, end_x, end_y,duration=None) :参数分别是起点坐标的x,y和终点坐标的x,y,以及滑动时间,滑动事件的单位是ms

实例1:

模拟手指从(100,2000),滑动到(100,1000)的位置

driver.swipe(100, 2000, 100, 1000)

实例2:

模拟手指从(100, 2000),滑动到(100, 100)的位置

driver.swipe(100, 2000, 100, 100, 5000)

2.2 scroll滑动事件

从一个元素滑动到另一个元素,直到页面自动停止。

方法:​​​​​​​

driver.scroll(origin_el, destination_el, duration=None) :参数分别是滑动开始的元素和滑动结束的元素

实例:

从“存储”滑动到“更多”​​​​​​​

save_button = driver.find_element_by_xpath("//*[@text='存储']")more_button = driver.find_element_by_xpath("//*[@text='更多']")driver.scroll(save_button, more_button,5000)

2.3 drag_and_drop拖拽事件

从一个元素滑动到另一个元素,第二个元素代替第一个元素原本屏幕上的位置。

方法:​​​​​​​

driver.drag_and_drop(origin_el, destination_el) :参数分别是滑动开始的元素和滑动结束的元素。

将“存储”拖拽到“更多”​​​​​​​

save_button = driver.find_element_by_xpath("//*[@text='存储']")more_button = driver.find_element_by_xpath("//*[@text='更多']")driver.drag_and_drop(save_button, more_button)

2.4 滑动和拖拽的选择​​​​​​​

滑动和拖拽无非就是考虑是否具有“惯性”,以及传递的参数是“元素”还是“坐标”。可以分为三种情况:无 “惯性” ,传入 “元素”:drag_and_drop。有 “惯性” ,传入 “坐标”:swipe,并且设置较短的duration时间。有 “惯性” ,传入 “元素”:scroll,并且设置较短的duration时间。

3、高级手势

高级手势TouchAction可以实现一些针对手势的操作,比如滑动、长按、拖动等。我们可以将这些基本手势组合成一个相对复杂的手势。比如,我们解锁手机或者一些应用软件都有手势解锁的这种方式。

想要使用TouchAction,必须要创建TouchAction对象,通过对象调用想要执行的手势,通过perform()执行动作。

需要导入的模块:

from appium.webdriver.common.touch_action import TouchAction

3.1 轻敲操作

模拟手指对某个元素或坐标按下并快速抬起。比如,固定点击(100, 100)的位置。

方法:​​​​​​​

TouchAction(driver).tap(element=None, x=None,y=None).perform() :参数可以是元素,也可以是x,y坐标

实例:

打开《设置》,轻敲“WLAN”​​​​​​​

# coding:utf-8from appium import webdriverfrom time import sleepfrom appium.webdriver.common.touch_action importTouchAction# 初始化desired_caps = {}# 使用哪种移动平台desired_caps['platformName'] = 'Android'# Android版本desired_caps['platformVersion'] = '7.1.2'#使用adb devices -l 查询,当有多台设备时,需要声明desired_caps['deviceName'] = '127.0.0.1:21503'#包名desired_caps['appPackage'] = 'com.android.settings'#界面名desired_caps['appActivity'] = '.Settings'# 启动服务driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)el = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")TouchAction(driver).tap(el).perform()sleep(5)#退出driverdriver.quit()

3.2 按下和抬起操作

模拟手指一直按下,模拟手指抬起。可以用来组合成轻敲或长按操作。

方法:

TouchAction(driver).press(el=None, x=None,y=None).perform() :模拟手指按下,参数和轻敲操作一样
TouchAction(driver).release().perform() :模拟手指对元素或坐标的抬起操作

实例1:

使用坐标的形式按下 WLAN(650, 650),2 秒后,按下(650, 650)的位置​​​​​​​

# coding:utf-8from appium import webdriverfrom time import sleepfrom appium.webdriver.common.touch_action importTouchAction# 初始化desired_caps = {}# 使用哪种移动平台desired_caps['platformName'] = 'Android'# Android版本desired_caps['platformVersion'] = '7.1.2'#使用adb devices -l 查询,当有多台设备时,需要声明desired_caps['deviceName'] = '127.0.0.1:21503'#包名desired_caps['appPackage'] = 'com.android.settings'#界面名desired_caps['appActivity'] = '.Settings'# 启动服务driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)TouchAction(driver).press(x=650, y=650).perform()sleep(2)TouchAction(driver).press(x=650, y=650).perform()sleep(5)#退出driverdriver.quit()

实例2:

使用坐标的形式按下 WLAN (650, 650),2 秒后,按下(650, 650)的位置,并抬起​​​​​​​

# coding:utf-8from appium import webdriverfrom time import sleepfrom appium.webdriver.common.touch_action importTouchAction# 初始化desired_caps = {}# 使用哪种移动平台desired_caps['platformName'] = 'Android'# Android版本desired_caps['platformVersion'] = '7.1.2'#使用adb devices -l 查询,当有多台设备时,需要声明desired_caps['deviceName'] = '127.0.0.1:21503'#包名desired_caps['appPackage'] = 'com.android.settings'#界面名desired_caps['appActivity'] = '.Settings'# 启动服务driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)TouchAction(driver).press(x=650, y=650).perform()sleep(2)TouchAction(driver).press(x=650,y=650).release().perform()sleep(5)#退出driverdriver.quit()

3.3 等待操作

模拟手指等待,比如按下后等待5秒之后再抬起,方法:

TouchAction(driver).wait(ms=0).perform() :参数是暂停的毫秒数

实例:

使用坐标的形式点击 WLAN(650, 650),2 秒后,按下(650, 650)的位置,暂停2秒,并抬起​​​​​​​

# coding:utf-8from appium import webdriverfrom time import sleepfrom appium.webdriver.common.touch_action importTouchAction# 初始化desired_caps = {}# 使用哪种移动平台desired_caps['platformName'] = 'Android'# Android版本desired_caps['platformVersion'] = '7.1.2'#使用adb devices -l 查询,当有多台设备时,需要声明desired_caps['deviceName'] = '127.0.0.1:21503'#包名desired_caps['appPackage'] = 'com.android.settings'#界面名desired_caps['appActivity'] = '.Settings'# 启动服务driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)TouchAction(driver).tap(x=650, y=650).perform()sleep(2)TouchAction(driver).press(x=650,y=650).wait(2000).release().perform()sleep(5)#退出driverdriver.quit()

3.4 长按操作

模拟手指移动操作,比如,手势解锁需要先按下,再移动,方法:

TouchAction(driver).move_to(el=None, x=None,y=None).perform() :参数同上

实例:

在手势解锁中,画一个解锁的图案。

手势解锁的包名和界面名:

com.android.settings/.ChooseLockPattern
# coding:utf-8from appium import webdriverfrom time import sleepfrom appium.webdriver.common.touch_action importTouchAction# 初始化desired_caps = {}# 使用哪种移动平台desired_caps['platformName'] = 'Android'# Android版本desired_caps['platformVersion'] = '7.1.2'#使用adb devices -l 查询,当有多台设备时,需要声明desired_caps['deviceName'] = '127.0.0.1:21503'#包名desired_caps['appPackage'] = 'com.android.settings'#界面名desired_caps['appActivity'] = '.ChooseLockPattern'# 启动服务driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)TouchAction(driver).press(x=150, y=525).move_to(x=450,y=525).move_to(x=750,y=525).move_to(x=750, y=825).move_to(x=450,y=825).move_to(x=150,y=825).move_to(x=450, y=1125).release().perform()sleep(5)#退出driverdriver.quit()

4、手机操作

4.1 获取手机分辨率

自动化测试可能会需要根据当前设备的屏幕分辨率来计算一些点击或者滑动的坐标,方法:

driver.get_window_size()

实例:

输出当前设备的屏幕分辨率:

print(driver.get_window_size())

4.2 手机截图

有些自动化的操作可能没有反应,但并不报错。此时我们就可以将操作过后的关键情况,截图留存,后期也可以根据图片发现问题。方法:

get_screenshot_as_file(filename) :参数是将截图保存为指定路径下、指定格式的图片

实例:

打开《设置》界面,截图当前页面保存到当前目录,命名为screen.png

driver.get_screenshot_as_file("screen.png")

4.3 获取和设置手机网络

视频应用在使用流量看视频的时候,大部分都会提示用户正在是否继续播放。作为测试人员,我们可能需要用自动化的形式来判断是否有对应的提示。即,用流量的时候应该有提示,使用WIFI的时候应该没有提示。

4.3.1 获取手机网络

driver.network_connection

实例:

获取当前网络类型,并打印到控制台

print(driver.network_connection)

4.3.2 设置手机网络

driver.set_network_connection(connectionType) :参数为网络类型

实例:

设置当前设备为飞行模式

driver.set_network_connection(1)

又将网络设置为全部打开

driver.set_network_connection(6)

4.4 发送键到设备

模拟按 “返回键” “home键” 等等操作,比如,很多应用有按两次返回键退出应用的功能,如果这个功能 需要我们做自动化,那么一定会用到这个方法。​​​​​​​

driver.press_keycode(keycode, metastate=None) :第一个参数是发送给设备的关键代码,第二个是关键代码的元信息,一般是默认值

实例:

点击三次音量加,再点击返回,再点击两次音量减。(为了让效果明显,我设置了暂停)​​​​​​​

driver.press_keycode(24)sleep(1)driver.press_keycode(24)sleep(1)driver.press_keycode(24)sleep(1)driver.press_keycode(4)sleep(1)driver.press_keycode(25)sleep(1)driver.press_keycode(25)

4.5 操作手机通知栏

测试即时通信类软件的时候,如果A给B发送一条消息,B的通知栏肯定会显示对应的消息。我们想通过通知栏来判断B是否收到消息,一定要先操作手机的通知栏。方法:

driver.open_notifications() :打开手机通知栏

appium官方并没有为我们提供关闭通知的api,那么现实生活中怎么关闭,就怎样操作就行,比如,手指从下往上滑动,或者,按返回键。

实例:

打开通知栏,两秒后,关闭通知栏​​​​​​​

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

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

 

这篇关于涨薪技术 —— 搞定Appium工作中常见应用操作!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/944198

相关文章

SpringBoot操作MaxComputer方式(保姆级教程)

《SpringBoot操作MaxComputer方式(保姆级教程)》:本文主要介绍SpringBoot操作MaxComputer方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录引言uqNqjoe一、引入依赖二、配置文件 application.properties(信息用自己

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

C#中的 Dictionary常用操作

《C#中的Dictionary常用操作》C#中的DictionaryTKey,TValue是用于存储键值对集合的泛型类,允许通过键快速检索值,并且具有唯一键、动态大小和无序集合的特性,常用操作包括添... 目录基本概念Dictionary的基本结构Dictionary的主要特性Dictionary的常用操作

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

C# winform操作CSV格式文件

《C#winform操作CSV格式文件》这篇文章主要为大家详细介绍了C#在winform中的表格操作CSV格式文件的相关实例,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录实例一实例效果实现代码效果展示实例二实例效果完整代码实例一实例效果当在winform界面中点击读取按钮时 将csv中

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O