Appium 元素定位 控件定位 uiautomatorviewer TouchAction Toast

Posted CSR-kkk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Appium 元素定位 控件定位 uiautomatorviewer TouchAction Toast相关的知识,希望对你有一定的参考价值。

元素定位

ID定位

android 系统元素的 id 为 resource-id,

driver.find_element(By.ID, "android:id/text3")

content-desc 定位

content-desc 的值与 accessibility_id 的值相同

driver.find_element(MobileBy.ACCESSIBILITY_ID, "accessibility_id_1")



控件定位

App客户端的页面通过 XML 来实现 UI 的布局,XML DOM 是定义访问和操作 XML 的标准方法。可以使用 XPath 对 XML DOM 中节点的定位

XPath定位

text 属性定位

driver.find_element(MobileBy.XPATH, "//*[@text='']")

resource-id 属性定位

driver.find_element(MobileBy.XPATH, "//*[@resource-id='']")

class 属性定位

driver.find_element(MobileBy.XPATH, "//*[@class='']")

content-desc 属性定位

driver.find_element(MobileBy.XPATH, "//*[@content-desc='']")

模糊定位

driver.find_element(MobileBy.XPATH, "//*[contains(@text='取消')]")

组合定位

driver.find_element(MobileBy.XPATH, "//*[@text='搜索' and @resource-id='search']")

层级定位

driver.find_element(MobileBy.XPATH, "//*[@text='搜索'/..]")



Uiautomatorviewer

使用 Uiautomatorviewer 工具可以抓取页面的元素。
uiautomatorviewer 是 Android SDK 自带的工具,在sdk/tools/uiautomatorviewer 路径下,可以将sdk/tools 路径配置到环境变量中,即可在命令行中 输入uiautomatorviewer 快速打开

两种方式:UiSelector(),UiScrollable()

定位元素:

driver.find_element_by_android_uiautomator('new UiSelector().text("我的")').click()
driver.find_element_by_android_uiautomator('new UiSelector().textContains("帐号密码")').click()
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/login_account")').send_keys("123")

# 组合定位
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/login_account").text("登录")')

# 滚动查找
driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().'
                                                        'scrollable(true).instance(0)).'
                                                        'scrollIntoView(new UiSelector().text("查找").'
                                                        'instance(0))')



控件交互

appium 提供的 API 可操作页面及页面上的节点
常用 API 如点击 click()、输入 send_keys() 、获取元素属性 get_attribute()、获取页面源码 page_source

driver.find_element(MobileBy.XPATH, "//*[@resource-id='']").click()
driver.find_element(MobileBy.XPATH, "//*[@='']").send_keys('')
# 获取 text属性
driver.find_element(MobileBy.XPATH, "//*[@='']").get_attribute('text')
# 获取其他属性 如:class、resource-id、content-desc
driver.find_element(MobileBy.XPATH, "//*[@='']").get_attribute('class')
...
# 获取源码
driver.page_source



TouchAction

TouchAction 是 AppiumDriver 提供的一个模拟手势操作的辅助类,通过它可以对手机屏幕进行手势操作,如滑动,长按,拖动等

参考常见用法:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/touch-actions.md

  • press
  • release
  • moveTo
  • tap
  • wait
  • longPress
  • cancel
  • perform

press

实现对元素或坐标的按下操作

press(WebElement e1)
press(int x, int y)
press(WebElement e1, int x, int y) # 在控件的左上角的 x 坐标偏移 x 单位,y坐标偏移 y 单位

release

实现在某个控件上的释放操作

release(WebElement e1)
release() # 可以直接执行释放操作

move_to

以控件为目标,从其他点移动到该控件目标上

move_to(WebElement e1)

以(x,y)点为目标,从其他点移动到该目标

move_to(WebElement e1, int x, int y)

tap

在某个控件的中心点进行敲击,或在某个坐标点进行敲击,或以控件的左上角为基准,x,y为偏移量进行敲击

tap(WebElement e1)
tap(int x, int y)
tap(WebElement e1, int x, int y)

wait

等待,单位为毫秒

wait()
wait(long timeout)
wait(long timeout, int nanos)

longpress

长按,参数有:e1,x,y,duration(持续时间)

long_press(WebElement e1)
long_press(int x, int y)
long_press(WebElement e1, int x, int y)

cancel

取消动作

cancel()

perform

执行操作

perform()

Toast

driver.find_element_by_xpath("//*[@class='android.widget.Toast']")

以上是关于Appium 元素定位 控件定位 uiautomatorviewer TouchAction Toast的主要内容,如果未能解决你的问题,请参考以下文章

appium 怎么获取android模拟器上的元素

Appium-关于appium的原生控件的 xpath 定位问题及常用方法

Appium自动化 - 可定位的控件属性

Appium移动端自动化测试--控件定位方法

Appium1.6 定位iOS元素和操作元素

appium 元素定位