技术分享 | app自动化测试(Android)--高级定位技巧( 三 )
driver.find_element_by_android_uiautomator(
'newUiSelector().description("搜索")').click()Java版本
driver.findElementByAndroidUIAutomator("new
UiSelector().description("搜索")").click();
组合定位方式
Uiautomator也支持组合元素查找功能 , 示例代码:Python版本
driver.find_element_by_android_uiautomator(
'newUiSelector().resourceId(
"com.xueqiu.android:id/tv_login_phone").text("手机号")').click()Java版本
driver.findElementByAndroidUIAutomator("newUiSelector().resourceId(
"com.xueqiu.android:id/tv_login_phone").text("手机号")").click();
滚动查找元素
Uiautomator使用UiScrollable()实现了滚动查找元素的功能 , 可以指定滑动到某个元素 , 示例代码:Python版本
driver.find_element_by_android_uiautomator(
'newUiScrollable(newUiSelector().scrollable(true)
.instance(0)).scrollIntoView(newUiSelector()
.text("我的").instance(0));').click()Java版本
driver.findElementByAndroidUIAutomator(
"newUiScrollable(newUiSelector().scrollable(true)
.instance(0)).scrollIntoView(newUiSelector().
text("我的").instance(0));").click();
上面的代码 , 在当前的页面滚动的查找text文本是“我的”这个元素 , 找到之后执行点击操作 。
cssselector元素定位
AppiumServer从1.19.0这个版本开始 , 元素定位增加了cssselector的支持 。 appium-uiautomator2-driver会将cssselector定位器转化成androiduiautomator定位方式 。
注意:appiuminspector暂时没有添加这种定位方式 。
由于UiSelector()的表达式是Java的语法格式 , 编写定位元素的表达式很复杂 , 代码编写工具(比如Pycharm , VSCode , IntelliJIDEA等)也不会有任何提示错误信息 。 只能是运行时才能发现表达式的错误 。 官方提供了cssselector的语法 , 会自动转成androiduiautomator的语法结构 , 这种原生的定位元素的方式 , 定位速度要更快一些 。
详情参考官方:https://github.com/appium/appium-uiautomator2-driver/pull/410
源码地址:https://github.com/appium/appium-uiautomator2-driver/blob/master/lib/css-converter.js
id定位
可以使用cssselector语法定位 。 如下代码 , #igk表示cssselector定位符Python版本
driver.find_element_by_css_selector('#igk')
对应ID定位器代码如下:
driver.find_element_by_id('android:id/igk')Java版本
driver.findElementByCssSelector("#igk").click();
对应ID定位器代码如下:
driver.findElementById("android:id/igk").click();
classname定位
如下代码 , 表示cssselector定位符为.android.widget.ImageView的元素Python版本
driver.find_element_by_css_selector('.android.widget.ImageView')
对应classname定位器代码如下:
driver.find_element_by_class_name("android.widget.ImageView")Java版本
driver.findElementByCssSelector(".android.widget.ImageView");
对应classname定位器代码如下:
driver.findElementByClassName("android.widget.ImageView");
text定位
如下代码 , 表示cssselector定位符为*[text='工作台']"的元素:Python版本
driver.find_element_by_css_selector("*[text='工作台']")
对应xpath定位器代码如下:
driver.find_element_by_xpath("//*[@text='工作台']")Java版本
driver.findElementByCssSelector("*[text="工作台"]");
对应xpath定位器代码如下:
driver.findElementByXPath("//*[@text="工作台"]");
description定位
如下代码 , 表示cssselector定位符为*[description="ContentDescription"]的元素:Python版本
driver.find_element_by_css_selector('*[description="ContentDescription"]')
对应accessibilityid定位器代码如下:
driver.find_element_by_accessibility_id("ContentDescription")Java版本
driver.findElementByCssSelector("*[description="ContentDescription"]");
- 微信更新正式版!“清理缓存”功能变强,小程序终于能分享到朋友圈
- 为什么现在很少有人提及“克隆技术”了?“克隆技术”有何缺点?
- A股:光伏电池片技术的“杀手锏”,HJT电池真正龙头仅有这5只!
- Apple Watch|稳了,iPhone 息屏显示功能来了
- 电信|印度电信和IT部长:印度本土研发的5G技术有潜力赢得全球市场
- 罗斯威尔坠毁了3架UFO?逆向工程研究早已开始,外星技术已被掌握
- NVIDIA的DLSS技术已经深受玩家和开发者认可|性能2倍于DLSS!AMD游戏神技FSR 2.0正式支持Xb
- Apple Watch|爆料指Apple Watch Series 8晶片沿用6代!将推极限运动版
- 闲鱼|闲鱼app或暗藏“灰色”交易?内行人道出实情,你经历过吗?
- 电子商务|3D打印机有多强大?科学家曾利用3D打印技术打印出火箭喷射器
