App自动化测试:高级控件定位技巧

简介

APP的控件元素, 包含了基础用户界面操作, 还涉及用户与应用程序里更复杂、功能丰富空间的互动。这种交互并非简单的按钮或输入框。借助相关方式, 能完成对应用程序的手势识别交互。这意味着可通过滑动、缩放、长按等手势, 实现更灵活、直观的用户体验。这种高级交互让应用程序更具交互性与吸引力, 为用户提供了更深入参与应用功能的途径。

介绍

作为其中关键类, 它是专门被设计为去执行各种手势以及交互操作, 这其中涵盖但不限于点击、滑动、长按等。该类的存在致使在移动端应用程序的自动化测试里, 借助它能够轻易地控制设备或者模拟器去执行多样化的手势操作, 经由它, 测试人员能够模拟用户真实的操作行为,以此确保应用在不同交互场景下具备稳定性以及可靠性。而这一功能对于移动应用的全面测试以及质量保证而言是至关重要的。

和 区别

它属于当中的某一个类别, 能够被用来开展一系列的行为动作, 像是鼠标处于悬停状态、进行拖放操作、按下键盘等行为。

它属于其中的一个类别, 专门用来开展手势以及交互方面的操作, 就像点击、滑动、长按这种的操作。

虽然这两者有着相似的名称, 不过呢, 它们却是为不同的自动化测试环境所设计的。

这事适用于网页自动化测试, 借助它能控制浏览器去执行各种各样的交互操作, 并且它还提供了一系列的方法用以模拟用户的行为。

而是被具体应用于移动端应用程序那儿的自动化测试, 借助其达成对设备或者是模拟器的操控来真正去推行各种各样的且是具有个性的姿态手法操作完毕!

不同于适用于各异自动化测试环境的情况, 其用法与语法也存在稍有差异之处。于其中使用时, 能够借由链式调用方法去施行一系列操作, 且运用()方法来促使操作得以执行。然而在当中使用时, 要创建对象, 借助其给出的方法来开展手势操作, 并用()方法来引发手势的执行。

用法

用到 去搞用户交互自动化时, 头一步得导入 类跟别的相关模块, 接着定义一个 实例, 而后把 送进去。随后, 能够借着定义输入源与确切的动作达成各种用户交互的操作。

滑动解锁示例

去达成手势滑动这个行为的时候, 一般来讲是需要把坐标给结合起来的, 并且能够借助于设备输入选项的设置, 在界面里头找出具体的坐标点来。

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

版本

复制代码
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"

总结

相关推荐
CAE3202 个月前
基于电阻抗成像的多模态手势识别系统构建与算法实现
手势识别·多模态融合·电阻抗成像
兵慌码乱2 个月前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
柱子jason3 个月前
基于IOT-Tree Server,配合IOT-Tree AI Edge实现手势识别
物联网·ai·手势识别·iot-tree
CV码3 个月前
MediaPipe入门指南
人工智能·计算机视觉·手势识别
小贺儿开发5 个月前
【MediaPipe】Unity3D 指间游鱼互动演示
游戏·unity·人机交互·摄像头·手势识别·互动·康复训练
Dev7z5 个月前
基于改进小波阈值的sEMG信号降噪与手势识别系统设计与实现
算法·手势识别·改进小波阈值·semg·信号降噪
Eric.Lee20218 个月前
python实现 mp4转gif文件
开发语言·python·手势识别·手势交互·手势建模·xr混合现实
brave and determined9 个月前
传感器学习(day09):三维手势识别:人机交互的未来革命
嵌入式硬件·手势识别·传感器·tof·嵌入式设计·多角成像技术·光飞时间技术