Android APP的元素定位和操控

鳄鱼君

发表文章数:642

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Android APP的元素定位和操控

App的元素定位

由于Appium是在Selenium的基础上进行封装,所以Appium的元素定位与操作采用了Selenium的部分方法。首先要学习的就是元素的查找方法,我们还是接着上一篇文章进行说明。Android系统的元素查找需要借助UI Automator Viewer实现。这里以TapTap软件为例,进行介绍。基本流程如下:


1. 将手机与计算机进行连接,连接之前确保手机已开启USB调试模式。
2. 唤醒手机屏幕,当手机界面出现USB调试提示信息时,单击“确定”按钮并打开手机的TapTap。
3. 打开软件UI Automator Viewer,单击“DeviceScreenshot”按钮捕捉手机当前界面。
4. 捕捉成功后,在软件的左侧会出现手机界面的截图。相关属性都会展示在软件的右侧,这些属性就是我们所需的元素属性。


假设我现在想定位搜索按钮,它一共有17个,但是只有5个属性能用于元素定位,它们分别是indextextresource-idclasscontent-desc

Android APP的元素定位和操控

一般来说使用UI Automator Viewer进行元素定位,会出现报错,这个算是搞得鳄鱼君Ba头皮发麻!这里鳄鱼君Ba不使用DeviceScreenshot实时获取屏幕截图,而是通过命令将截图和xml保存在本地,然后选择添加文件进行元素定位。

Android APP的元素定位和操控

创建一个文本文件,在添加以下代码之前,需要在E盘创建app.uix和app.png文件夹用于保存xml和截图:

adb shell uiautomator dump /sdcard/app.uix
adb pull /sdcard/app.uix E:/app.uix
adb shell screencap -p /sdcard/app.png
adb pull /sdcard/app.png E:/app.png

将文本文件另存为.bat,放置到桌面上,需要定位元素的时候运行即可。若没有xml文件,重试几次就可以了!目前这种方式相对于DeviceScreenshot还是方便的。

那么,Appium对搜索按钮的定位方法如下:

# 通过index定位
# 通过Appium的uiautomator方法
index='0'
ua='new UiSelector().index('+index+')'
driver.find_element_by_android_uiautomator(ua).click()

# 通过text定位
# 通过Appium的uiautomator方法

text=''
ua='new UiSelector().text("'+text+'")'
driver.find_element_by_android_uiautomator(ua).click()

# 通过resource-id定位
resourceId='com.taptap:id/right_search'
# Selenium的方法
driver.find_element_by_id(resourceId)
# Appium的uiautomaotr方法
ua='new UiSelector().resourceId("'+resourceId+'")'
driver.find_element_by_android_uiautomator(ua).click()

# 通过class定位
# Selenium方法
class_name='android.widget.ImageView'
driver.find_elements_by_class_name(class_name)

# 通过content-desc定位
# 通过Appium的uiautomator方法
description=''
ua='new UiSelector().description("'+description+'")'
driver.find_element_by_android_uiautomator(ua).click()
# 方法er
driver.find_element_by_accessibility_id('').click()


# xpath定位
xpath='//android.widget.ImageView'
driver.find_element_by_xpath(xpath).click()

元素定位主要使用了Selenium的方法和Appium的uiautomator方法实现,在5个属性中,除了元素属性class之外,其余4个元素属性都能使用Appium的uiautomator方法进行定位,Selenium的方法只适用于class和resource-id属性,而Selenium的Xpath方法是根据元素的布局进行定位,它能用于任何Android应用程序。对于空值需要灵活选择定位方式。

App的元素操控

通过上面的代码可以发现,在定位后的元素都执行了单击处理,该操作由click()方法实现。当我们使用手机的时候,使用过程中大多数操作都是单击(click方法)、文本输入(send_keys方法)和滑动(swipe方法)。下面主要介绍文本输入和滑动操作。

这里以还是TapTap为例进行说明,还是按照流程,进行定位,然后点击搜索按钮会进入一个搜索页面,在搜索页面可以输入鲜果的搜索内容

Android APP的元素定位和操控

我们要对图中两个文本框进行定位并操控,第一个文本框是进行单击操控,第二个文本框是进行文本输入操作,具体的实现代码如下:

在代码中,字典desired_caps额外设置了参数unicodeKeyboard和resetKeyboard,前者是将键盘输入内容改为unicode格式,后者是将手机的输入法改为Appium的输入法。只有同时设置这两个参数,Appium才能在手机上输入中文内容,否则输入的内容就会变成乱码。
Appium在运行Android应用程序的时候,应用程序在启动时是处于一种初始化的状态,也就是说Appium清除了用户在这个应用上的使用痕迹。当Android应用程序启动成功后,系统会出现相应的系统提示框,因此在执行自动化操作之前,还需要对这些系统提示进行相应的处理才能执行下一步的操作。

Appium的滑动操作可以分为上滑、下滑、左滑和右滑,不管哪一种滑动,它们都是由swipe()方法实现,只要对swipe()方法传入不同的参数就能实现不同的滑动方式,swipe()方法的定义如下:

从swipe()方法定义可以看到,滑动屏幕需要借助屏幕上的坐标位置,由于每台手机的分辨率和尺寸大小不同,如果将滑动位置设为一个固定的坐标,在其他手机上不一定能适用,所以只能够根据手机的屏幕大小来制定滑动位置。Appium提供了相应的方法来获取手机屏幕的尺寸大小,实现过程如下:

函数getSize()是我们自定义的函数,在函数中使用了Appium的get_window_size()方法来获取手机屏幕分辨率。每台手机的坐标点都是从左上方为起点,右下方为终点,这与计算机屏幕分辨率的坐标点分

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Android APP的元素定位和操控》 发布于2020-05-28

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

5 + 6 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册