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 等)来找到相应的控件元素。确保测试脚本中的等待和定位策略,以及对元素状态的验证,可以提高测试的稳定性和可靠性。

相关文章
|
14天前
|
敏捷开发 监控 测试技术
软件测试中的敏捷实践:提升效率与质量的双重策略
在快速迭代的软件研发环境下,敏捷测试以其灵活性和高效性成为提升产品质量的关键因素。本文深入探讨了敏捷测试的核心理念,并结合具体案例分析,揭示如何在软件开发周期内实现持续的质量监控,以及如何通过自动化测试工具和团队协作提高测试效率。文章旨在为读者提供一套实用的策略和方法,以适应不断变化的市场需求,确保软件项目的成功交付。
34 3
|
3天前
|
运维 监控 测试技术
漫谈测试策略
本文以团队内约定俗成的测试策略概念为主题,总结了一些个人经验和思考结论,可能对其他业务/团队而言,存在术语定义不一致,希望对大家有参考意义,欢迎探讨,感谢理解。
|
7天前
|
运维 监控 Devops
运维自动化:提升效率与减少人为错误的策略
【8月更文挑战第12天】在信息技术的海洋中,运维自动化如同一艘装备精良的航船,引领企业驶向高效、精准的彼岸。本文将深入探讨运维自动化的重要性,分析其如何通过智能化工具和策略,实现流程优化、效率提升及错误率降低。我们将一同见证,当创新技术与运维实践相结合时,是如何为企业带来革命性变革的。
|
3天前
|
运维 监控 持续交付
运维自动化:提升效率与稳定性的关键策略
【8月更文挑战第16天】在当今快速发展的技术环境中,运维自动化已成为企业追求高效运营和系统稳定性的重要工具。本文将探讨自动化如何转变传统运维模式,通过减少人为错误、加快故障恢复时间和提高资源利用率来优化运维工作。文章还将讨论自动化技术的最新趋势,以及企业在实施自动化时需要考虑的策略和挑战。
|
1天前
|
人工智能 自然语言处理 搜索推荐
彻底摒弃人工标注,AutoAlign方法基于大模型让知识图谱对齐全自动化
【8月更文挑战第18天】知识图谱作为结构化语义库,在AI领域应用广泛,但构建中实体对齐难题一直存在。近期,AutoAlign提供了一种全自动对齐方案,由张锐等人研发并发布于arXiv。此方法摒弃传统的人工标注依赖,利用大型语言模型实现全自动化对齐。AutoAlign包括谓词与实体对齐两部分,通过构建谓词邻近图及计算实体嵌入,有效提升对齐性能。实验显示其性能超越现有方法,尤其适用于大规模数据集。尽管如此,AutoAlign仍面临计算资源消耗及不同领域适应性等挑战,未来需进一步优化以增强鲁棒性和泛化能力。
10 7
|
6天前
|
测试技术
探索软件测试的奥秘:如何构建有效的测试策略
在软件开发的海洋中,测试是确保航船不沉没的灯塔。本文将带你领略测试的魅力,从基础概念到高级策略,我们将一起航行在软件测试的广阔海域,探寻那些隐藏在代码深处的秘密。准备好了吗?让我们启航吧!
17 1
|
7天前
|
运维 监控 安全
运维自动化:提升企业效率的关键策略
【8月更文挑战第12天】在数字化时代,企业面临着日益复杂的技术挑战。传统的手动运维方式已无法满足现代企业的需求,而自动化运维成为了解决这一难题的钥匙。本文将深入探讨自动化运维的核心价值、实现方法及其对企业运营效率的深远影响,旨在为读者提供一套清晰的自动化运维实施框架和效益分析。
|
10天前
|
安全 测试技术 UED
探索软件测试的艺术:从基础到高级策略
在数字化时代的浪潮中,软件测试不仅是保障产品质量的守门人,也是推动技术创新的催化剂。本文将带领读者穿越软件测试的丛林,从基础的概念理解到高级的测试策略,揭示如何通过精准的测试实践来优化产品性能和用户体验。我们将一起探索自动化测试的魅力,性能测试的挑战,以及安全测试的重要性,最终实现从测试新手到专家的华丽转变。
17 2
|
14天前
|
测试技术 持续交付
探索式测试:一种高效且灵活的软件质量保证策略
在快速迭代和持续交付的软件开发环境中,传统的测试方法往往难以应对日益增长的测试需求。探索式测试作为一种灵活而高效的测试实践,强调测试人员的个人技能和经验,鼓励在测试过程中不断探索和学习。本文将介绍探索式测试的核心概念、实施步骤以及如何将其与传统测试方法相结合,以提升软件质量和测试效率。
|
14天前
|
敏捷开发 设计模式 JSON
自动化测试中的代码复用策略
【8月更文挑战第5天】在软件测试的世界中,自动化测试的高效性与代码的复用性息息相关。本文将深入探讨如何在自动化测试中实施代码复用的策略,包括模块化、封装以及数据驱动测试等方法。通过具体的代码示例,我们将展示如何将这些策略应用到实际的测试框架中,以提升测试代码的可维护性和扩展性。