首页 > 其他分享 >App自动化测试:高级控件交互技巧

App自动化测试:高级控件交互技巧

时间:2024-04-01 11:34:34浏览次数:40  
标签:控件 ActionChains 手势 App driver actions Actions 交互 self

简介

APP 的控件元素不仅涵盖了基础用户界面操作,还包括用户与应用程序中更复杂、功能丰富的空间之间的互动。这种交互远不止于简单的按钮或输入框。通过借助 Appium 的 Actions,能够完成对应用程序进行手势识别的交互。这意味着可以通过各种手势,如滑动、缩放、长按等,实现更灵活、直观的用户体验。这种高级交互使得应用程序更具交互性和吸引力,为用户提供了更深入参与应用功能的途径。

Actions 介绍

Actions 是 Appium 中的关键类,专门设计用于执行各种手势和交互操作,包括但不限于点击、滑动、长按等。这个类的存在使得在移动端应用程序的自动化测试中,通过 Appium 可以轻松地控制设备活模拟器执行多样化的手势操作,通过 Actions ,测试人员可以模拟用户真实的操作行为,确保应用在不同交互场景下的稳定性和可靠性。这一功能对于移动应用的全面测试和质量保证至关重要。

ActionChains 和 Actions 区别

ActionChains 是 Selenium WebDriver 中的一个类,可用于执行一系列的操作,如鼠标悬停、拖放、按下键盘等。

而 Actions 是 Appium 中的一个类,用于执行手势和交互操作,如点击、滑动、长按等。

尽管两者的名称相似,但它们是针对不同的自动化测试环境而设计的。

ActionChains 适用于网页自动化测试,通过 Selenium WebDriver 控制浏览器执行各种交互操作,并提供了一系列方法来模拟用户的行为。

而 Actions 则适用于移动端应用程序的自动化测试,通过 Appium 控制设备或模拟器执行各种手势操作。

除了适用于不同的自动化测试环境之外, ActionChains 和 Actions 的用法和语法也略有不同。在 Selenium WebDriver 中使用 ActionChains 时,可以通过链式调用方法来执行一系列操作,并使用 perform() 方法来触发操作的执行。而在 Appium 中使用 Actions 时,需要创建 TouchAction 对象,并使用其提供的方法来执行手势操作,并使用 perform() 方法来触发手势的执行。

Actions 用法

在使用 ActionChains 进行用户交互自动化时,首先需要导入 ActionChains 类以及其他相关模块,然后定义一个 ActionChains 实例,并将 driver 传入。之后,可以通过定义输入源和具体的动作来实现各种用户交互操作。

  • 导入 ActionChains 类及其他模块

  • 定义 ActionChains 实例 'actions',传入 driver

  • 定义输入源

  • 定义动作

  • 执行动作

滑动解锁示例

  • 安装手势密码锁 app(TouchAction.apk)
  • 打开应用
  • 点击【设置手势】
  • 完成手势操作(如图)

实现手势滑动时,通常需要结合坐标,并可通过设置设备的输入选项,从界面中找到具体的坐标点。

手势滑动路径如下图所示:

Python 版本


class TestActionChains:

    def setup_class(self):
        # 设置启动参数
        caps = {
            "platformName": "Android",
            "appium:appPackage": "cn.kmob.screenfingermovelock",
            "appium:appActivity": "com.samsung.ui.FlashActivity",
            "appium:noReset": True,
            "appium:shouldTerminateApp": True,
        }
        # 初始化 driver
        self.driver = webdriver.Remote('http://localhost:4723', options=UiAutomator2Options().load_capabilities(caps))
        # 设置隐式等待
        self.driver.implicitly_wait(15)

    def teartdown_class(self):
        # 退出应用程序
        self.driver.quit()

    def test_slide_to_unlock(self):
        # 点击设置手势
        self.driver.find_element(by=AppiumBy.ID, value="cn.kmob.screenfingermovelock:id/patternTxt").click()
        print(self.driver.get_window_size())
        # 定义ActionChains实例
        actions = ActionChains(self.driver)
        # 定义输入源
        actions.w3c_actions = ActionBuilder(self.driver, mouse=PointerInput(interaction.POINTER_TOUCH, "touch"))
        # 定义动作 pointer_down按下 pause暂停 release释放
        # 需要实现3个点之间的滑动,A->B 水平滑动 B—>C 竖直滑动
        bounds = self.driver.find_element(AppiumBy.ID, 'cn.kmob.screenfingermovelock:id/patternView').get_attribute(
            'bounds')
        actions.w3c_actions.pointer_action.move_to_location(204, 377)
        actions.w3c_actions.pointer_action.pointer_down()
        actions.w3c_actions.pointer_action.move_to_location(930, 373)
        # 停顿0.5s 模拟在两个点之间进行拖拽操作
        actions.w3c_actions.pointer_action.pause(0.5)
        actions.w3c_actions.pointer_action.move_to_location(846, 1150)
        actions.w3c_actions.pointer_action.pause(0.5)
        actions.w3c_actions.pointer_action.release()
        # 执行操作
        actions.perform()
                # 获取【继续】按钮的 clickable 属性值
        result = self.driver.find_element(AppiumBy.ID, "cn.kmob.screenfingermovelock:id/btnTwo").get_attribute(
            "clickable")
        # 断言【继续按钮】可点击
        assert result == "true"

总结

  • Actions 用法

  • 滑动解锁示例

标签:控件,ActionChains,手势,App,driver,actions,Actions,交互,self
From: https://www.cnblogs.com/hogwarts/p/18108048

相关文章

  • Android 10.0 lowmemorykiller低内存时,禁止某个app被kill掉功能实现
    1.前言在10.0的系统定制化开发中,在对于系统lowmemorykiller低内存的时候,应用保活功能是非常重要的,就是在低内存的情况下禁止某个app被杀掉,所以就需要从lowmemorykiller机制入手,在杀进程的相关流程中进行分析来实现进程避免被杀掉,接下来就来实现这个功能2.lowmemorykiller低......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧007-Mapping out the future
    手把手教你做阅读理解题-初中中考阅读理解解题技巧007-MappingoutthefuturePDF格式公众号回复关键字:ZKYD007阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标......
  • 程序与用户之间交互
    【一】用户交互交互的本质就是输入、输出用户交互就是人往计算机中input/输入数据,计算机print/输出结果【二】为什么要与用户交互为了让计算机能够像人一样与用户沟通交流【三】如何实现交互【1】输入(input)input接受的所有数据类型都是str类型username=input("......
  • 某xx冰城app-sha256withrsa分析
    现在的天气是真的越来越暖和,太容易口渴了,索性拿出裤兜的几块钱买杯凉饮喝喝吧!那不说来就来了。今天分析的app是6Jyc6Zuq5Yaw5Z+OYXBwLXYxLjIuMA==,安装包百度一下即可。1.先抓个包没错,今天要分析的是这个"sign"字段,"t"是一个时间戳,所以每次请求加密肯定都是变化的。2.......
  • Android studio制作的mqtt协议通讯app,可用于搭建的meqx服务器,不可连接阿里云
    首先,在app目录下创建一个libs文件夹,导入相应的MQTT的jar包,然后右击jar包拉到最后找到Add...的一个选项,单击就OK了然后就是添加一些权限添加另一个layout的名字activity_main<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.......
  • uni-app项目如何运行至安卓模拟器(MuMu模拟器12)
    uni-app项目如何运行至安卓模拟器(MuMu模拟器12)一篇搞定全过程,可根据个人需求通过目录进行跳转。uni-app项目也可以运行在AndroidStudio中,可根据个人需求进行选择使用。文章目录uni-app项目如何运行至安卓模拟器(MuMu模拟器12)一、本文使用工具与插件二、安装MuMu......
  • 32-3 APP渗透核心 - APP数据包抓取
    环境准备安装模拟器:在PC上安装一个Android模拟器,例如Genymotion、Bluestacks或者AndroidStudio提供的模拟器等。模拟器可以模拟手机环境,让你在PC上运行Android应用程序。下载APP:在模拟器中下载需要进行渗透测试的APP。你可以通过GooglePlay商店、APK文件或者其他渠道获......
  • Fiddler系列课程笔记(三): HTTPS及安卓&iOS设备APP抓包
    Fiddler系列课程笔记(三):HTTPS及安卓&iOS设备APP抓包1.HTTPS抓包1.1什么是HTTPS?HTTPS(全称:HyperTextTransferProtocoloverSecureSocketLayer),HTTPS协议是由HTTP加上TLS/SSL协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技......
  • 服务端工程师进化史-从零开始的APP开发(5)
    前章1.开发环境搭建2.项目环境搭建3.golang项目基础框架-前篇4.golang项目基础框架-后篇开始本篇开始搭建管理后台的前端项目,其实纯讲前端好像没啥营养,刚好本项目是采用旧项目改造的基础框架搭建的,就讲讲改造过程中,遇到难点,以及如何处理!主要是笔者工作期间的产物,在给......
  • TransformControls 是 Three.js 中的一个类,用于在网页中进行 3D 场景中物体的交互式操
    demo案例TransformControls是Three.js中的一个类,用于在网页中进行3D场景中物体的交互式操作。让我们来详细讲解它的输入参数、输出、属性和方法:输入参数:TransformControls构造函数通常接受两个参数:camera(THREE.Camera):用于渲染场景的摄像机。这个参数是必需的。......