appium-元素定位

在web测试中,可以使用F12辅助元素定位,app中没有这样的工具,需要安装第三方的工具,目前主流的工具有:

  • android uiautomatorviewer
  • weditor
  • appium inspect

1.appium inspect

是appium服务内置的工具,点击搜索按钮即可打开appium inspect

inspect配置界面,Desired Capabilities参数与caps参数一致,配置好后另存为即可,方便下次直接使用。

然后点击Start Session开始会话。

该工具可以实现元素定位和验证元素定位表达式。 

其中App Source 是源码,简单了解下安卓的源码结构:

a)元素属性

  • index 索引
  • text,属于元素的属性,@text获取.text,html中使用text()获取文本
  • resource-id,不一定唯一,元素的id属性,几乎每个元素都有id属性,如果id不唯一,可以尝试定位父级元素或子级元素
  • class 是元素种类,指的不是web当中的class,指的是组件类型,ImageView,TextView,标签的名称,对应于html的tagname
  • bounds,边界坐标值,类似于html的盒模型
  • content-desc,声音的时候使用
  • checkable,可以被选中
  • focusable,可以放光标,文本或者输入框
  • 每个元素的属性都是固定的

b)元素布局和控件

  • imageview==》类似于html中的image标签,tagname
  • textview,显示文本的标签
  • layout,相当于html中的div,用于排版
  • button,按钮
  • checkbox,多选
  • switch,开关
  • ratingbar,评分条
  • seekbar,拖动条
  • toast 弹出
  • webview(显示网页),类似于html中的iframe,在一个网页当中嵌套另一个网页
  • 原生控件里面套网页
  • 其他组件很多

除appium框架外,还有其他框架可以实现APP端的自动化测试。

  • uiautomator2框架

除appium框架外,还可以了解下uiautomator2框架。

uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作。

可以自行了解:GitHub - openatx/uiautomator2: Android Uiautomator2 Python Wrapper

  • airtest框架

GitHub - AirtestProject/Airtest: UI Automation Framework for Games and AppsAirtest是一个跨平台的UI自动化测试框架,适用于游戏和App。

官方文档:欢迎来到Airtest官方文档! — airtest 文档

可以自行了解:GitHub - AirtestProject/Airtest: UI Automation Framework for Games and Apps

2.元素定位辅助工具 

除appium inspect外,还有

  • 安卓自带的uiautomatorviewer,找到uiautomatorviewer.bat或者建立快捷方式点击即可启动

本地位置:D:\Program Files\android_sdk\tools\bin\uiautomatorviewer.bat

用法基本和appium inspect相似,但不需要配置参数,然后启动比较快,但不能验证元素定位表达式是否唯一。

  • weditor,安装:pip install weditor,命令行输入wediter进行启动,weditor与appium服务不能同时运行。

3.appium inspect工具元素定位实例

import time
from appium.webdriver import Remote

# 启动一次请求
# 1、指明需要连接的服务地址和端口号
# 2、You must include a platformName capability
# 3、caps的作用就是告诉appium服务我们要干什么,启动的哪个设备,哪个app应用程序(apk绝对路径)
caps = {
    "platformName": "Android",
    # "deviceName": "emulator-5554",
    "udid": "emulator-5554",
    # 安装apk
    # "app": "D:\lemon_app_webview_debug.apk",
    "platformVersion": "7.1.2",
    "unicodeKeyboard": True,
    "resetKeyboard": True,
    "autoGrantPermissions": True,
    # 已存在APP时,可以不使用app属性,获取app包名和activities
    "appPackage": "com.lemon.lemonban",
    "appActivity": ".activity.WelcomeActivity"

}
driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub',
                desired_capabilities=caps)
# 隐性等待
driver.implicitly_wait(10)
# 找元素id
el1 = driver.find_element("id", "com.lemon.lemonban:id/navigation_my")
# 找元素 xpath
el2 = driver.find_element("xpath", "//*[@resource-id='com.lemon.lemonban:id/navigation_my']")
el2.click()
# 强制等待
time.sleep(3)
driver.quit()

4.appium的用法和selenium为什么那么像?

appium:from appium.webdriver import Remote

selenium:from selenium.webdriver import Chrome

查看源码可知,Remote和Chrome继承的类是同一个类。

5.元素定位优先用什么方式?

  • 优先使用id,id不是唯一的,appium inspector 元素搜索
  • xpath,组合id和其他属性(text,索引)
  • find_element_by_android_uiautomator('new UiSelector().text("我")'),UiSelector是通过安卓代码定位,比较容易出错,不建议使用。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值