Android测试自动化(篇二):元素定位工具WEditor的使用

一、元素定位工具WEditor的介绍

引用自:web-editor/README_ZH.md at master · alibaba/web-editor (github.com)

编辑器能够提供辅助编写脚本,查看组件信息,调试代码等功能。

相关文档:

  1. alibaba/web-editor: web editor for atx (github.com)

  2. web-editor/README_ZH.md at master · alibaba/web-editor (github.com)

  3. web-editor/DEVELOP.md at master · alibaba/web-editor (github.com

二、界面布局

在weditor启动成功后,会自动打开浏览器进入如下图页面(这里连接的是MuMu模拟器)

网页的基本布局分为Screen、Properties和Tree。Screen标签用于实时显示连接设备的屏幕,Properties标签的主要作用是罗列元素的的属性,Tree标签是代码功能区、元素结构区(Hierarchy)和输出区(Console)的集合。

QQ截图20220707190116.png

首次进入,优先选择Android系统,输入连接地址,最后点击Connect按钮。

需要adb成功连接目标设备,WEditor才会显示设备屏幕,以下是一些常用的adb命令:

1)常用命令

  • adb devices #查看连接设备

  • adb -s cf27456f shell # 指定连接设备使用命令

  • adb install test.apk # 安装应用

  • adb install -r demo.apk #安装apk 到sd 卡:

  • adb uninstall cn.com.test.mobile #卸载应用,需要指定包

  • adb uninstall -k cn.com.test.mobile #卸载app 但保留数据和缓存文件

  • adb shell pm list packages #列出手机装的所有app 的包名

  • adb shell pm list packages -3 #列出除了系统应用的第三方应用包名

  • adb shell pm clear cn.com.test.mobile #清除应用数据与缓存

  • adb shell am start -ncn.com.test.mobile/.ui.SplashActivity #启动应用

  • adb shell dumpsys package #包信息Package Information

  • adb shell dumpsys meminfo #内存使用情况Memory Usage

  • adb shell am force-stop cn.com.test.mobile #强制停止应用

  • adb logcat #查看日志

  • adb logcat -c #清除log 缓存

  • adb reboot #重启

  • adb get-serialno #获取序列号

  • adb shell getprop ro.build.version.release #查看Android 系统版本

  • adb shell top -s 10 #查看占用内存前10 的app

  • adb push <local> <remote> #从本地复制文件到设备

  • adb pull <remote> <local> #从设备复制文件到本地

  • adb bugreport #查看bug 报告

  • adb help #查看ADB 帮助

2)连接设备

  • adb连接指定设备:adb [-d|-e|-s <serialNumber>] <command>

参数:

-d 指定当前唯一通过USB 连接的Android 设备为命令目标

-e 指定当前唯一运行的模拟器为命令目标

-s <serialNumber> 指定相应serialNumber 号的设备/模拟器为命令目标

command 为所需对设备执行的命令

3)启动停止服务

  • adb start-server #启动adb 服务,基本不会用到,因为只要设备连接正确,会自动启动adb server

  • adb kill-server #停止adb server

  • adb -P <port> start-server #指定adb server 的网络端口port (默认为5037)启动服务

3)查看版本设备

  • adb version #查看adb 版本信息

  • adb devices #查看adb 连接设备

  • adb shell getprop ro.product.model #查看设备型号

  • adb get-serialno #获取设备序列号

  • adb bugreport #查看bug 报告

  • adb logcat #查看日志

  • adb shell wm size #查看屏幕分辨率

  • adb shell wm density #查看屏幕密度

三、元素定位的使用

UI测试自动化的本质是界面元素的定位,通过使用WEditor可以对UI中的元素快速定位。

对UI中的文字进行检验时,笔者在这里提出一种解决思路,需要有一定的代码能力。首先需要Android的XML布局格式和控件有一定的了解,比如控件名称。在对界面的基本布局有一定的了解后,根据操作进入需要检查文字的界面,这里可以记录下Coding,可以用于自动化代码的编写。对界面截图保存到本地,使用文字识别进行匹配判别需求和实现是否保持一致。(文字的排版可能会影响识别结果,这里需要对算法有一些基本认识,参数的更改会影响部分算法的输出结果)

这里以“海豚股票”APP为例,只为举例方便,无任何商业行为!

启动WEditor,成功连接设备后,会自动打开浏览器,如下图所示:

QQ截图20220729140004.png

3.1 元素定位

ui2中支持Android中UiSelector类中所有的定位方式,详情见谷歌官网

名称

描述

text

text是指定文本的元素

textContains

text中包含有指定文本的元素

textMatches

text符合指定正则的元素

textStartsWith

text以指定文本开头的元素

className

className是指定类名的元素

classNameMatches

className类名符合指定正则的元素

description

description是指定文本的元素

descriptionContains

description中包含有指定文本的元素

descriptionMatches

description符合指定正则的元素

descriptionStartsWith

description以指定文本开头的元素

checkable

可检查的元素,参数为True,False

checked

已选中的元素,通常用于复选框,参数为True,False

clickable

可点击的元素,参数为True,False

longClickable

可长按的元素,参数为True,False

scrollable

可滚动的元素,参数为True,False

enabled

已激活的元素,参数为True,False

focusable

可聚焦的元素,参数为True,False

focused

获得了焦点的元素,参数为True,False

selected

当前选中的元素,参数为True,False

packageName

packageName为指定包名的元素

packageNameMatches

packageName为符合正则的元素

resourceId

resourceId为指定内容的元素

resourceIdMatches

resourceId为符合指定正则的元素

3.2 设备交互

注:因为工具是python代码开发的,这里使用的示例代码都是python

  • 启动海豚APP->行情->更多->沪深京A股,对所有的单股进行遍历截图。截图包括单股详情一张,十字光标移动K线图两张,并对截图前置股票代码命名文件。

# coding: utf-8
#
import uiautomator2 as u2
import re
import time
import os

d = u2.connect()

#竖屏截图
def screenshotVertical(stockCode,stockName):
    savePath = "d:\\screenshot"
    PathExist(savePath)
    #展开单股详情信息
    d.xpath('//*[@resource-id="com.ss.android.caijing.stock:id/root"]/android.widget.LinearLayout[1]').click()
    d.screenshot('%s\\%s-%s.png'%(savePath,stockCode,stockName))
    #收回单股详情信息
    d.xpath('//*[@resource-id="com.ss.android.caijing.stock:id/root"]/android.widget.LinearLayout[1]').click()
    d.touch.down(100, 1000) # 模拟按下
    time.sleep(1.5)
    d.touch.move(200, 1000) # 模拟移动
    d.screenshot('%s\\%s-%s-move200-竖屏.png'%(savePath,stockCode,stockName))
    #time.sleep(0.1)
    d.touch.move(300, 1000) # 模拟移动
    d.screenshot('%s\\%s-%s-move300-竖屏.png'%(savePath,stockCode,stockName))
    #time.sleep(0.1)
    d.touch.move(400, 1000) # 模拟移动
    d.touch.up(400,1000) # 模拟抬起

def PathExist(path):
    if os.path.isdir(path):
        pass
    else:
        os.makedirs(path)

#启动海豚app
d.app_start("com.ss.android.caijing.stock") 
#点击行情
d.xpath('//*[@resource-id="com.ss.android.caijing.stock:id/tabLayoutLl"]/android.widget.LinearLayout[3]').click()
#点击更多
d.xpath('//*[@resource-id="com.ss.android.caijing.stock:id/pageContainer"]/android.widget.LinearLayout[1]/android.widget.LinearLayout[2]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/androidx.recyclerview.widget.RecyclerView[1]/android.widget.FrameLayout[6]').click()

#单击沪深京A股
#也可以使用d(text='沪深京A股').click()
d(resourceId="com.ss.android.caijing.stock:id/mainText", text="沪深京A股").click()

#点击第一个股票,不使用text定位,可能会找不到元素,改用xpath定位
d.xpath('//*[@resource-id="com.ss.android.caijing.stock:id/recycler_content_list"]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]').click()


d.xpath('//*[@resource-id="com.ss.android.caijing.stock:id/root"]/android.widget.LinearLayout[1]').click()

while True:
    #点击日K
    d(resourceId="com.ss.android.caijing.stock:id/dayKlineTab").click()
    #获取股票名称
    stockName = d.xpath('//*[@resource-id="com.ss.android.caijing.stock:id/stockName"]').get_text() 
    stockName = re.sub('[\/:*?"<>|]','-',stockName)#去掉非法字符
    stockCode = d.xpath('//*[@resource-id="com.ss.android.caijing.stock:id/stockCode"]').get_text() 
    
    #截图函数
    screenshotVertical(stockCode,stockName)

    #如果没有下一个,退出当前循环
    if str(d(resourceId="com.ss.android.caijing.stock:id/nextStockIv").click_exists()) == 'False' :
        break
    else :
        #点击下一个
        d(resourceId="com.ss.android.caijing.stock:id/nextStockIv").click

#退出单股详情
d(resourceId="com.ss.android.caijing.stock:id/ivBack").click()

#退出沪深京A股股票列表
d(resourceId="com.ss.android.caijing.stock:id/back").click()


#转载请注明出处!
快来制作你的简历吧 ,请猛戳这里→点击在线制作
宝塔服务器面板,一键全能部署及管理,送你3188元礼包。请猛戳这里→点我领取

本文标题:《Android测试自动化(篇二):元素定位工具WEditor的使用》作者:xuanzhe
原文链接:https://blog.xuanzhe.club/?id=64
特别注明外均为原创,转载请注明。

分享到微信

扫描二维码

可在微信查看或分享至朋友圈。

相关文章

发表评论:
验证码

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

你好,朋友

真是美好的一天!

访客信息

  • IP: 3.22.51.241
  • 地点: United StatesOhioDublin

标签列表

站点信息

  • 文章总数:69
  • 页面总数:2
  • 分类总数:19
  • 标签总数:34
  • 评论总数:7
  • 浏览总数:147010
您好,欢迎到访网站!
忘记密码

网站分类

文章归档

歌曲 - 歌手
0:00