当前位置:主页 > 查看内容

自动化测试-uiautomatorviewer.bat

发布时间:2021-05-08 00:00| 位朋友查看

简介:目录 一.认识定位控件(元素定位工具) 二.功能及按钮介绍 三.Appuim支持的定位方式 3.01 id定位 3.02 name定位 3.03 className定位 3.04 classNameMatches定位 3.05 textMatches 正则匹配查找 3.06 textStartsWith定位 3.07 class_name定位 3.08父子关系、兄……

一.认识定位控件(元素定位工具)
  • 该工具位于android-sdk-windows\tools\uiautomatorviewer.bat双击即可启动,启动过程中组件所打开的CMD窗口不用关闭;手机开启USB调试,或打开模拟器即可使用
  • 在使用Appium的时候,需要填写Desired Capabilities,这里使用Android SDK自带的uiautomatorviewer.bat控件可以便捷的获取所需信息
二.功能及按钮介绍
  • 通过截屏并分析XML布局文件的方式,为用户提供控件信息查看服务

  • 获取节点元素相关属性
    在这里插入图片描述

  • 获取点位坐标
    在这里插入图片描述

  • The first button:Open:Screenshot;UI XML Dump打开本地截图和打开.uix格式文件(uix文件需安装Binary Data打开)

  • Second button:Device Screenshot(uiautomator dump)设备屏幕截图(uiautomator转储)

  • Third button:Device Screenshot with Compressed Hierarchy(uiautomator dump --compressed)具有压缩层次结构的设备屏幕截图

  • Save:保存至本地指定位置

  • 在Android Studio中可以通过Android Device Monitor 调用UI Automator Viewer在这里插入图片描述

  • First button on the right:+Expand All-全部展开

  • Second button on the right:Toggle NAF Nodes-切换NAF节点,点击后展示不可被识别的控件

  • Third button on the right:Clear search results-清除搜索结果

三.Appuim支持的定位方式
3.01 id定位
  • 通过uiautomatorviewer.bat 工具可以查看对象的id属性;
  • 如果目标设备的API Level低于18则UIAutomatorViewer不能获得对应的Resource ID,只有等于大于18的时候才能使用;
  • resource-id 就是的id属性;
  • 使用方法(未验证):driver.find_element_by_id(‘android:id/text1’).click();driver.findElement(By.id(“com.android.calculator2:id/formula”))在这里插入图片描述
3.02 name定位

一般text属性认为是name
在这里插入图片描述

3.03 className定位

通过调用android uiautomator使用className进行定位

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.EditText")')
ele.send_keys('132')
3.04 classNameMatches定位

通过className正则匹配进行定位

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().classNameMatches (".*EditText")')
ele.send_keys('132')
3.05 textMatches 正则匹配查找

textMatches故名思义就是通过正则的来进行查找定位,他也是通过text的属性来进行正则匹配

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^请输入手.*")')
ele.send_keys("123")
3.06 textStartsWith定位
driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("请输入")')
3.07 class_name定位
  • 定位一个控件class就是class_name ,一般获得的view都不止一个,所以应该需要遍历一遍得到的views,然后缩小搜索条件来获得目标控件;如果多个只操作第一个driver.find_element_by_class_name("com.jingdong.app.mall:id/ic").click()
  • 定位组控件,例如:com.jingdong.app.mall:id/ic;
    driver.find_elements_by_class_name("com.jingdong.app.mall:id/ic")[1].click(),或WebElement button = driver.findElement(By.className(“com.jingdong.app.mall:id/ic”));在这里插入图片描述
3.08父子关系、兄弟关系定位
self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/title_container").childSelector(text("密码"))')
self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/title_container").fromParent(text("密码"))')
3.09 滚动查找
self.driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("查找的元素文本").instance(0));')
3.10 Accessibility_id定位

参数取content-desc的值:driver.find_element_by_accessibility_id('Accessibility').click()findElement(By.AccessibilityId("sharebutton"))
在这里插入图片描述

3.11 XPath定位
  • Appium对于xpath定位执行效率是比较低的,也就是说遇到xpath的定位代码的时候,执行比较慢;迫不得已的情况下尽量不用这个定位方式
    (参数取text的值)driver.find_element_by_xpath('//*[@text="Accessibility"]').click()
    (参数取resource-id的值)driver.find_element_by_xpath('//*[@resource-id="android:id/text1"]').click()
    参数格式:
    1)//class
    2)//class[n]
    3)//class[@属性=“属性值”]
    4)//class[@属性=“属性值” and @属性=“属性值”]
    5)//*[@属性=“属性值”]
    例如:com.jingdong.app.mall:id/ic
    driver.findElement(By.xpath("//com.jingdong.app.mall:id/ic"))
    driver.find_element_by_xpath('//*[@resource-id="android:id/text1"]').click()
    在这里插入图片描述
agree_continue_xpath = "//*[@text='退出登录']"
 
WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.XPATH, agree_continue_xpath)))
driver.find_element_by_xpath(agree_continue_xpath).click()
3.12 contains模糊定位

用于获取toast时,toast文本内容较长,可采用contains包含部分文本的匹配方式;以用来模糊匹配上面的文本属性“退出登录”
在这里插入图片描述

agree_continue_xpath = "//android.widget.Button[contains(@text, '退出')]"
 
WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.XPATH, agree_continue_xpath)))
driver.find_element_by_xpath(agree_continue_xpath).click()
3.13 AndroidUiAutomator定位元素

AndroidUIAutomator是一个强有力的元素定位方式,它是通过Android UIAutomator类库去找元素,定位方式:findElement(By.AndroidUIAutomator(String UIAuto));
可以选择id,nameclassName,description作为传入的字符串

WebElement el =

driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"com.tencent.mm:id/do\")");
3.14 resourceID定位

resourceld定位和appium封装好的id定位一样,差别在写法变成了uiautomator的写法

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("cn.com.open.mooc:id/et_phone_edit")')
ele.send_keys('234')
3.15 resourceIDMatches 定位

通过id进行正则匹配定位

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().resourceIdMatches(".+et_phone_edit")')
ele.send_keys('123')
3.16组合定位

xpath中同时包含class和text两个属性
在这里插入图片描述

agree_continue_xpath = "//*[@class='android.widget.TextView' and @text='退出登录']"
 
WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.XPATH, agree_continue_xpath)))
driver.find_element_by_xpath(agree_continue_xpath).click()
3.17 Android UIAutomator定位

android uiautomator原理是通过android 自带的android uiautomator的类库去查找元素,其实和appium的定位一样,或者说他比appium的定位方式更佳多以及更佳适用,它也支持id、className、text、模糊匹配等进行定位

3.18 支持层级定位

1.driver.find_element_by_xpath("//android.widget.ListView/android.widget.TextView").click()
2.driver.find_element_by_xpath("//android.widget.ListView/*[1]").click()
3.driver.find_element_by_xpath('//*[@resource-id="android:id/list"]/*[1]').click()在父元素API Demos下,Accessibility是第1个子元素;xpath的索引从1开始
4.driver.find_element_by_xpath('//*[@resource-id="android:id/list"]/*[@resource-id="android:id/text1"]').click()
5.driver.find_element_by_xpath('//android.widget.TextView[contains(@text,"Acce")]').click()

  • 参数格式://class[@属性=“属性值”]/class[]/class
3.19 支持部分定位

driver.find_element_by_xpath('//android.widget.TextView[contains(@text,"Acce")]').click()

3.20 Android原生支持元素定位方式

①(参数取resource-id的值)driver.find_element_by_android_uiautomator('new UiSelector().resourceId("android:id/text1")').click()
简化(默认是UiSelector对象):driver.find_element_by_android_uiautomator('.resourceId("android:id/text1")').click()
例如:WebElement element = driver.findElement(By.id("com.tencent.mm:id/do"));
driver.findElementById("com.tencent.mm:id/do")
②(参数取class的值)driver.find_element_by_android_uiautomator('.className("android.widget.TextView")').click()
③(参数取text的值)driver.find_element_by_android_uiautomator('.text("Accessibility")').click()

3.21Appium不支持的元素定位方式

在这里插入图片描述

3.22 appium与selenium元素定位之比较

appium是app端,用appium需导出selenium包
selenium是web端

frameElement positioning methodremarks
appiumid, className, AccessibilityId, xpath, AndroidUIAutomatorfor H5,Same support selenium name,link,text,css
seleniumid, className, name, tag name, link text, paratial link text, xpath ,css
;原文链接:https://blog.csdn.net/weixin_45576146/article/details/115299014
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐