Appium控件交互策略:优化自动化测试效率的关键方法

简介: 该文介绍了如何使用Selenium与APP进行交互,包括点击、输入和状态判断等操作。例如,通过element.click()点击控件,element.send_keys()输入文本,以及element.is_displayed()检查元素是否可见。还展示了如何获取元素属性,如resource-id、text和class,并提供了Python代码示例来定位并操作APP元素,如滑动条的显示、可点击性检测及点击滑动条中心位置。在编写测试脚本时,应注意元素定位和状态验证以确保测试稳定性。

image.png

简介

与 Web 元素操作一样(参考 Selenium Web 元素操作),定位到 APP 控件元素后,可以对控件进行一系列的操作,实现与 APP 交互,比如点击、文本输入、元素属性获取等。

控件交互常用方法

常见操作

  • 点击方法 element.click()。
  • 输入操作 element.send_keys('appium')。
  • 清除操作 element.clear()。

状态判断

  • 是否可见 element.is_displayed() 返回 True/False。
  • 是否可用 element.is_enabled() 返回 True/False。
  • 是否被选中 element.is_selected() 返回 True/False。

获取元素属性

  • 获取元素属性:
    • element.get_attribute()
    • resource-id/resourceld 返回 resource-id(API=>18 支持)。
    • text 返回 text。
    • class 返回 class(API=>18 支持)。
    • content-desc/contentDescription 返回 content-desc 属性。
    • checkable,checked,clickable,enabled,focusable,focused 等。
  • 获取元素文本:
    • 格式:element.text。
  • 获取元素坐标:
    • 格式:element.location。
    • 结果:{'y': 19,'x: 498}。
  • 获取元素尺寸(高和宽):
    • 格式:element.size。
    • 结果:{'width':500,'height':22)。

控件操作交互示例

  • 打开 ApiDemos.apk。
  • 点击 Animation 进入下个页面。
  • 点击 Seeking 进入下个页面。
  • 查看【RUN】按钮是否显示/是否可点击。
  • 查看【滑动条】是否显示/是否可点击。
  • 获取【滑动条】长度。
  • 点击【滑动条】中心位置。
class TestEleOper:

    def setup_class(self):
        '''
        完成 capability 设置
        初始化 driver
        :return:
        '''
        # 设置 cpability
        caps = {
   
   
            # 设置 app 安装的平台(Android,iOS)
            "platformName": "Android",
            # 设置 appium 驱动
            "appium:automationName": "uiautomator2",
            # 设置设备名称
            "appium:deviceName": "emulator-5554",
            # 设置被测 app 的包名
            "appium:appPackage": "io.appium.android.apis",
            # 设置被测 app 启动页面的 Activity
            "appium:appActivity": ".ApiDemos",
            # 不清空缓存信息
            "appium:noReset": True,
            # 首次启动的时候,不停止app
            "appium:dontStopAppOnReset": True,
            # 跳过安装,权限设置等操作
            "appium:skipDeviceInitialization": True
        }

        # 初始化 driver
        self.driver = webdriver.Remote(
            "http://127.0.0.1:4723",
            options=UiAutomator2Options().load_capabilities(caps)
        )
        # 添加隐式等待
        self.driver.implicitly_wait(10)

    def test_ele_oper(self):
        '''
        点击滑动条中心位置
        :return:
        '''
        # 点击 Animation
        self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Animation").click()
        # 点击 Seeking
        self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Seeking").click()
        # 查看【RUN】按钮是否显示/是否可点击
        run_btn_ele = self.driver.find_element(AppiumBy.ID, "io.appium.android.apis:id/startButton")
        print(f"RUN按钮是否显示 {run_btn_ele.is_displayed()}")
        print(f"RUN按钮是否可点击 {run_btn_ele.is_enabled()}")
        # 查看【滑动条】是否显示/是否可点击
        seek_bar_ele = self.driver.find_element(AppiumBy.ID, "io.appium.android.apis:id/seekBar")
        print(f"滑动条是否显示 {seek_bar_ele.is_displayed()}")
        print(f"滑动条是否可点击 {seek_bar_ele.is_enabled()}")
        # 获取【滑动条】长度
        seek_bar_ele_width = seek_bar_ele.size.get('width')
        print(f"滑动条长度为 {seek_bar_ele_width}")
        # 获取【滑动条】起始位置坐标
        seek_bar_ele_start = seek_bar_ele.location
        print(f"滑动条起始位置坐标为 {seek_bar_ele_start}")
        # 获取【滑动条】中间位置坐标
        seek_bar_center_x = seek_bar_ele_start.get("x") + seek_bar_ele_width/2
        seek_bar_center_y = seek_bar_ele_start.get("y")
        seek_bar_center = (seek_bar_center_x, seek_bar_center_y)
        print(f"滑动条中间位置坐标为 {seek_bar_center}")
        # 点击【滑动条】中间位置
        self.driver.tap([seek_bar_center], 1000)

总结

常见控件的基本交互方式,可以模拟用户与应用程序的交互。在编写测试脚本时,通常需要结合元素的定位方式(如 ID、XPath 等)来找到相应的控件元素。确保测试脚本中的等待和定位策略,以及对元素状态的验证,可以提高测试的稳定性和可靠性。

相关文章
|
2月前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
153 11
|
2月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
68 4
|
3天前
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
46 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
2天前
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
30 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
24天前
|
人工智能 自然语言处理 API
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
UI-TARS 是字节跳动推出的新一代原生图形用户界面(GUI)代理模型,支持跨平台自动化交互,具备强大的感知、推理、行动和记忆能力,能够通过自然语言指令完成复杂任务。
336 16
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
CogAgent-9B 是智谱AI基于 GLM-4V-9B 训练的专用Agent任务模型,支持高分辨率图像处理和双语交互,能够预测并执行GUI操作,广泛应用于自动化任务。
124 12
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
|
1月前
|
人工智能 编解码 自然语言处理
AGUVIS:指导模型实现 GUI 自动化训练框架,结合视觉-语言模型进行训练,实现跨平台自主 GUI 交互
AGUVIS 是香港大学与 Salesforce 联合推出的纯视觉 GUI 自动化框架,能够在多种平台上实现自主 GUI 交互,结合显式规划和推理,提升复杂数字环境中的导航和交互能力。
102 8
AGUVIS:指导模型实现 GUI 自动化训练框架,结合视觉-语言模型进行训练,实现跨平台自主 GUI 交互
|
2月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
501 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
3月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
68 6
|
3月前
|
JavaScript 安全 编译器
TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法
本文深入探讨了 TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法,并通过实际案例展示了其在项目中的应用效果,旨在提升代码质量和开发效率。
73 6