涨薪技术 —— 搞定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自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

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

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Appium是一个开源的移动应用自动化测试框架,可以用于测试Android和iOS应用程序。它可以模拟用户的操作行为,比如点击、滑动、输入等,以及获取应用的元素信息来进行自动化测试。 通过使用Appium,可以编写自动化测试脚本来验证应用在不同设备和操作系统版本上的功能和稳性。 在实际应用,可以使用Appium来进行以下操作: 1. 启动应用:通过提供应用的Package名称和Activity名称,可以使用Appium启动应用。 2. 模拟用户操作:可以使用Appium模拟用户的点击、滑动、输入等操作,以验证应用的各种功能和交互。 3. 获取元素信息:使用Appium提供的API,可以获取应用各个元素的属性和状态,比如文本内容、坐标、大小等。 4. 断言和验证:可以使用Appium来验证应用的各种状态和行为,比如判断某个元素是否可见、文本内容是否正确等。 5. 自动化测试框架集成:Appium可以与各种测试框架集成,比如JUnit、TestNG、Cucumber等,方便编写和管理测试用例。 6. 多平台支持:Appium支持多种移动平台,包括Android和iOS,可以使用相同的脚本和API进行跨平台的测试。 实际应用Appium的步骤可以包括以下几个方面: 1. 配置测试环境:安装Appium和相关依赖,配置设备和模拟器的连接。 2. 编写测试脚本:使用编程语言(比如Python、Java、Ruby等)编写测试脚本,通过Appium提供的API来模拟用户操作和验证应用行为。 3. 执行测试脚本:运行测试脚本,连接到设备或模拟器,执行自动化测试,并生成测试报告和日志。 4. 分析结果和修复问题:根据测试结果和日志,分析应用的问题和缺陷,修复bug或改进应用的功能和性能。 总之,Appium是一个强大的移动应用自动化测试框架,通过模拟用户操作和获取应用元素信息,可以进行自动化测试和验证应用的各种功能和交互。它可以在不同设备和操作系统版本上运行,实现跨平台的测试,并与各种测试框架集成,方便编写和管理测试用例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值