文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Appium在Android UI测试应用

2022-06-06 12:56

关注

  Appium 是一个 C/S 架构的,支持 Android/iOS Native, Hybrid 和 Mobile Web Apps 的测试框架,与测试程序通过 Selenum Webdriver 协议通讯。Webdriver 的好处是通过 HTTP RPC 的方式调用 Server 上的过程,编写测试脚本不受语言的限制,无论是 Python, Java, NodeJS 均可以方便的编写测试。本文中将使用 Python 进行编程。   起因是因为市场部的同事抛来如下需求:批量添加一些微信好友。直接抓取请求进行重放的方法是不靠谱的,微信与服务端的通讯均加密,Pass。考虑使用 xposed 等框架 hook 相关函数进行操作。但是 xposed 需要越狱,且开发复杂,Pass。后来想到了使用 UI 测试工具进行模拟操作,开发较为简单。   Android UI 测试工具有很多种,如 Monkey, UIAutomator, Selendroid, Robotium 等。其中 UIAutomator, Monkey, Selendroid 均为非侵入式的 UI 测试,也是不需要修改源代码,只要安装了目标程序可以进行测试。Robotium 需要与源码一同编译测试。Appium 实际上是一个测试工具的统一调度软件,将不同的非侵入式测试工具整合在一起,对外提供统一的 API。在 Android 2.3 以前的版本,Appium 会调用 Selendroid ,之后的版本会直接使用 UIAutomator,iOS 下使用 UIAutomation。Appium 还支持 FirefoxOS 的 UI 测试。

  安装 Appium   官网给出了命令行下的安装方法。但实际上 Appium 有 GUI 版本,更适合在 Windows/MacOS 下使用。Windows 下需要安装 .NET Framework。   > brew install node      # get node.js   > npm install -g appium  # get appium   > npm install wd         # get appium client   > appium &               # start appium   > node your-appium-test.js   Appium 需要依赖 Android SDK 编译在手机端运行的两个插件,因此需要首先安装相应的 Android SDK 版本。这里直接使用了 Android Studio 中自带的 SDK Manager。在 SDK Manager 中选择和测试机相对应的 SDK Platform 和较新的 Build-tools,如果需要使用模拟器测试还要装对应的 ARM/x86 System Image,以及 Intel HAXM Installer,用于加速 x86 虚拟机。Appium 使用 adb 来与目标机器通讯,因此对于真机和模拟器操作几乎都是相同的,如何建立模拟器在此不再赘述。   安装完成后需要在 Appium GUI 中配置 Android SDK 目录,随后选择 Android,点击 Launch 可以启动 Appium Server。

  Appium Server 默认会监听 http://localhost:4723 ,用于 RPC 通讯。下面我们可以打开熟悉的编程环境,编写 UI 测试用例了。这里使用 Python 进行编写,需要先安装 Appium 的 Python Client ,然后再 python 中使用 appium.webclient 可以连接 Appium server了。   pip install Appium-Python-Client   使用 Appium 进行 UI 控制   根据注释修改相应属性后即可运行测试。手机需要打开 ADB 调试,执行完以下代码后,Appium 会在手机上安装 Appium Settings 和 Unlock 两个程序,随后微信会被启动。   from appium import webdriver   desired_caps = {}   desired_caps['platformName'] = 'Android' #测试平台   desired_caps['platformVersion'] = '5.1' #平台版本   desired_caps['deviceName'] = 'm3_note' #设备名称,多设备时需区分   desired_caps['appPackage'] = 'com.tencent.mm' #app package名   desired_caps['appActivity'] = '.ui.LauncherUI' #app默认Activity   dr = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) #启动Remote RPC   Selenum Webdriver 使用了一种类似于 JS 中的 DOM 模型的方法来选择页面中的元素。dr 为当前正在活动的 activity 对象,可以使用 findElementByXXX 的方法来获取 Activity 中的元素。所有 Element 后带 s 的函数,均获得所有匹配的元素,不带 s 的函数获得第一个匹配的元素。   查询函数   1. findElement(s)ByName   在 Android 中基本没用。Android UI 没有 Name 这个属性。有说可以使用 text 值获取。但我并没有成功   2. findElement(s)ByClassName   通过类名来获取元素,用法如下:   item_list = dr.find_elements_by_class_name("android.widget.LinearLayout")   item_list[2].click()   3. findElementById   通过 resource_id 来获取元素,每个 Activity 中都是的,用法如下   t = dr.find_element_by_id("com.tencent.mm:id/f7")   t.send_keys(wechatId)   4. findElement(s)ByAccessbiltiyId   在 Android 上 AccessbilityID 实际是 contentDescription 。这个属性是为了方便视力受损人士使用手机所设置。开启 TTS 后系统会朗读相关控件的 contentDescription。   5. findElement(s)ByXPath   通过 XML Path 描述来寻找元素。我没有成功的获取到,可能是 XPath 写的有问题。   s = dr.find_element_by_xpath("//android.widget.TextView[contains(@text,'搜索')]")   s.click()   6. findElementByAndroidUIAutomator   通过 UIAutomator 的选择器来获取元素。因为 Appium 在 Android 上实际是调用的 UIAutomator,所以可以通过 UIAutomator 的选择器来选择元素。   el = dr.find_element_by_android_ui_automator("new UiSelector().text("搜索")")   el.click()   操作函数   操作函数用于操作选定的元素,有很多,以下仅列举几个,更多的请查阅手册。   click   send_keys   clear   查询函数返回的元素对象可以像 JS 中的 dom 元素一样,继续使用查询函数来选定其子元素。用例如下。   search = dr.find_element_by_id("com.tencent.mm:id/aqw")   .find_element_by_class_name("android.widget.RelativeLayout")   search.click()   如何确定查询规则   了解了相关的函数后,下面应对 UI 进行定位了。如果是自己团队开发的程序,推荐让开发同学在所有的空间上都添加 resource_id 进行定位。如果碰到没有谈价 resource_id 的元素,那要使用别的办法进行定位了。   1. UI Automator Viewer   UI Automator Viewer 是 Android 官方的 UI 定位工具,位于 sdk/tools 下。运行后会打开 viewer 界面。按钮即可获取当前正在运行的 Activity 的 UI 结构。


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯