UI 自动化 (六) —— Appium 的定位方式

UI 自动化 (六) —— Appium 的定位方式,第1张

概述Appium概念手机App分为两大类,原生App(NativeApp)和混合APP(HybridApp)原生App(NativeApp)原生App实际就是我们所常见的传统App开发模式,云端数据存储+App应用客户端。App应用客户端,包含了所有的UI元素、框架逻辑等。只有数据存储在云端。混合App(HybridApp)混合App就是HTML5App,混 Appium 概念

手机App分为两大类,原生App(Native App)和混合APP(HybrID App)

原生App(Native App)

原生App实际就是我们所常见的传统App开发模式,云端数据存储+App应用客户端。App应用客户端,包含了所有的UI元素、框架逻辑等。只有数据存储在云端。

混合App(HybrID App)

混合App就是HTML5 App,混合App通常由两部分组成,HTML5云网站+App应用客户端,这里的App应用客户端实际只是个架子,里面的UI元素和逻辑,都是存储在云端的,每次在打开App时,去云端获取数据呈现给手机用户。说白了混合App就是将Web页面嵌套到了App应用客户端中。由于每次打开App都要向HTML云端服务请求数据,所以会产生不小的数据流量,并且如果没有网络,会导致无法看到HTML App。这就是常说的H5页面。

Appium介绍

Appium是一个开源、跨平台的自动化测试框架,它适用于Native App、HybrID App。

Appium有个比较好的设计哲学,简单的说就是不要为了移动端自动化测试而单独开发一套API接口,所以Appium也是基于Selenium的Webdriver进行了扩展,扩展了一些 *** 作移动端的API接口,在我们学习完Selenium的API接口后,我们在学习Appium只需要学习扩展的那些 *** 作移动端的API接口即可。

Appium最牛之处在于支持跨平台 *** 作。实际上我们在测试时是启动了一个Appium Server,这个Server可以放到任意的机器上,供公司的自动化测试人员共同使用。

Appium原理

Appium既然是基于Selenium做的二次扩展,那么Appium也是一个经典的ClIEnt-Server的设计模式,我们的Code就是狭义上的客户端,Server端与Selenium不同,Selenium直接测试浏览器Web页面,将浏览器作为服务端。而Appium的服务端是我们自己启动的Appium-Server。数据与 *** 作命令传递与Selenium API接口相同,遵守REST设计风格的API接口。(所谓的REST设计风格,只是一帮喜欢写论文的人装逼搞出来的名词,让大家看的云里雾里。简单的理解,就是一种接口设计方式,网上对于REST的解释层出不穷,翻译成三句话,看URL知道要什么、看http Metod知道干什么、看http Status Code知道结果。)

Appium工作流

 

Appium 定位的方式Classname

AndroID

AndroID的class属性对应Classname定位方式,Classname一般都是会重复的,可以通过index来获取需要的元素。(从0开始查找dom树中的同名class属性)

iOS

iOS的type属性对应CLassname定位方式,Classname一般都是会重复的,可以通过index来获取需要的元素。(从0开始查找dom树中的同名class属性)

 

ID

AndroID

AndroID的resource-ID对应ID定位方式,这个ID也可能存在重复情况,可以通过index来获取需要的元素。(从0开始查找dom树中的同名resource-ID属性)

使用appium-desktop来获取元素时,如果提示有ID的定位方式,则可以只接获取,代表唯一。

 

XPATH

AndroID

AndroID的Xpath定位与PC的XPATH定位大同小异,可以通过相对路径的定位方式定位,区别在于,这里相对路径定位的//后只可以接AndroID的class属性或*。(//androID.Widget.button[@text="登 录"])

iOS

iOS10 以上使用XCUITest框架后,原生框架不支持XPATH,Appium进行了转换,速度很慢不建议使用。

 

AccessibilityID

AndroID

AndroID的content-desc属性对应AccessibilityID定位方式,这个content-desc属性专门为残障人士设置,如果这个属性不为空则推荐使用。

iOS

iOS的label和name属性都对应AccessibilityID定位方式,如果有则推荐使用。

 

AndroIDUIautomator

AndroID的源生测试框架的定位方式,定位速度快。推荐使用牢记常用的几种。

# 这个在运行时,调用的是AndroID自带的UI框架Uiautomator的API# 介绍几个简单常用的,text、classname、resource-ID# text# 匹配全部text文字driver.find_element_by_androID_uiautomator('new UiSelector().text("手机号")')# 包含text文字driver.find_element_by_androID_uiautomator('new UiSelector().textContains("机")')# 以text什么开始driver.find_element_by_androID_uiautomator('new UiSelector().textStartsWith("手")')# 正则匹配textdriver.find_element_by_androID_uiautomator('new UiSelector().textMatches("^手.*")') # classnamedriver.find_elements_by_androID_uiautomator('new UiSelector().classname("androID.Widget.TextVIEw")')# classnameMatchesdriver.find_elements_by_androID_uiautomator('new UiSelector().classnameMatches("^androID.Widget.*")') # resource-ID、resourceIDMatchesdriver.find_element_by_androID_uiautomator('new UiSelector().resourceID("com.syqy.wecash:ID/et_content")') # descriptiondriver.find_element_by_androID_uiautomator('new UiSelector().description("S 日历")')# descriptionStartsWithdriver.find_element_by_androID_uiautomator('new UiSelector().descriptionStartsWith("日历")')# descriptionMatchesdriver.find_element_by_androID_uiautomator('new UiSelector().descriptionMatches(".*历$")')

iOSPredicateString

仅支持iOS10以上,可以多个属性同时定位,推荐。(替代XPATH)

driver.find_elements_by_ios_predicate("label == '登录'") driver.find_elements_by_ios_predicate("type='XCUIElementTypeOther' and name='联系人,标签, 第2个按钮,共3个'")

iOSUIautomation

iOS9.3以下使用,现在已经废弃,iOSPredicateString代替了iOSUIautomation

Appium 怎么用?

上一篇博客我们学会了如何搭建 Appium 的环境,那么如何才能连接呢?

打开移动设备打开 appium-server,并且与移动设备连接打开 appium-clIEnt,配置好与 appium - server 的连接信息

1、打开移动设备

首选的是移动设备也就是真机,其次才是模拟器

2、打开 appium-server,并且将其与移动设备连接

在 cmd 下输入 appium,启动一个 appjium 的 server 

appium(node:12476) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.[Appium] Welcome to Appium v1.8.1[Appium] Appium REST http interface Listener started on 0.0.0.0:4723

 

并且将其与移动设备连接,真机的话建议用 usb ,一定要打开开发者模式以及允许 USB 调试

另外开一个 CMD ,输入:adb devices ,显示 List of devices attached 即为连接成功

adb devicesadb server version (31) doesn't match this clIEnt (41); killing...* daemon started successfullyList of devices attachedemulator-5554   device

 

3、打开 appium - clIEnt ,配置好连接信息,让 clIEnt 端可以 *** 作 server 端,server 端再去 *** 作移动端

定位元素方式

青铜:appium 客户端

王者:安装的 SDK 下的 tool 下的 uiautomatorvIEwer.bat

appium 使用

1、打开 appium

 

总结

以上是内存溢出为你收集整理的UI 自动化 (六) —— Appium 的定位方式全部内容,希望文章能够帮你解决UI 自动化 (六) —— Appium 的定位方式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1112539.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存