appium+python自动化32-android_uiautomator定位进阶版

前言

上一盘介绍uiautomator的定位方式都是类似这种'new UiSelector().xxx("xxx")',看起非常长,我也记不住,这很不python。于是本篇优化了定位方法,去掉该死的'new UiSelector().'

一、组合定位

1.一般组合用id,class,text这三个属性会比较好一点,其次description这个属性也可以一起两两组合

2.id与text属性组合

```

# 1.id+text

id_text = 'resourceId("com.baidu.yuedu:id/webbooktitle").text("小说")'

driver.find_element_by_android_uiautomator(id_text).click()

```

3.class与text属性组合

```

sleep(2)

# 2.class+text

class_text = 'className("android.widget.TextView").text("图书")'

driver.find_element_by_android_uiautomator(class_text).click()

```

4.其它更多组合,id,class也可以与其它的index,checkable,clickable,password等这些不常用的属性组合,小编试了下不稳定,所以不推荐

二、父子定位childSelector

1.有时候不能直接定位某个元素,但是它的父元素很好定位,这时候就先定位父元素,通过父元素找儿子。

> 举个例子:你很喜欢一个女生,但是没她的直接联系方式。你有她爸的联系方式,于是你就可以通过先找她爸,再找到她。

```

# 父子关系childSelector

son = 'resourceId("com.baidu.yuedu:id/rl_tabs").childSelector(text("小说"))'

driver.find_element_by_android_uiautomator(son).click()

```

三、 兄弟定位fromParent

1.有时候父元素不好定位,但是跟他相邻的兄弟元素很好定位,这时候就可以通过兄弟元素,找到同一父级元素下的子元素。

> 举个例子:你喜欢一个女生,但是没她的直接联系方式。你跟她哥哥关系是铁哥们,于是你就可以通过她哥哥来找到她。

```

# 兄弟关系fromParent

brother = 'resourceId("com.baidu.yuedu:id/lefttitle").fromParent(text("图书"))'

driver.find_element_by_android_uiautomator(brother).click()

```

四、 更多高级技能

上一篇讲到text定位有四种方式,那么id,class也是可以正则匹配。我试了下id和class的StartsWith和Contains会报错,所以不推荐了。

1.text

- text("text文本")

- textContains("包含text文本")

- textStartsWith("以text文本开头")

- textMatches("正则表达式")

2.className

- className("class属性")

- classNameMatches("正则表达式")

```

# classNameMatches(".*xxx$")

classMatches = 'classNameMatches(".*TextView$").text("小说")'

driver.find_element_by_android_uiautomator(classMatches).click()

```

3.resourceId

- resourceId("id属性")

- resourceIdMatches("正则表达式")

```

# resourceIdMatches(".*xxx$")

idmatches = 'resourceIdMatches(".*id/lefttitle$")'

driver.find_element_by_android_uiautomator(idmatches).click()

```

五、 参考代码

```

# coding:utf-8

from appium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from time import sleep

desired_caps = {

'platformName': 'Android',

'deviceName': '127.0.0.1:62001',

'platformVersion': '4.4.2',

'appPackage': 'com.baidu.yuedu',

'appActivity': 'com.baidu.yuedu.splash.SplashActivity',

'noReset': 'true',

'resetKeyboard': 'true',

'unicodeKeyboard': 'true'

}

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

# 等主页面activity出现

driver.wait_activity(".base.ui.MainActivity", 10)

# 1.id+text

id_text = 'resourceId("com.baidu.yuedu:id/webbooktitle").text("小说")'

driver.find_element_by_android_uiautomator(id_text).click()

sleep(2)

# 2.class+text

class_text = 'className("android.widget.TextView").text("图书")'

driver.find_element_by_android_uiautomator(class_text).click()

sleep(2)

# 父子关系childSelector

son = 'resourceId("com.baidu.yuedu:id/rl_tabs").childSelector(text("小说"))'

driver.find_element_by_android_uiautomator(son).click()

sleep(2)

# 兄弟关系fromParent

brother = 'resourceId("com.baidu.yuedu:id/lefttitle").fromParent(text("图书"))'

driver.find_element_by_android_uiautomator(brother).click()

sleep(2)

# resourceIdMatches(".*xxx$")

idMatches = 'resourceIdMatches(".*id/lefttitle$")'

driver.find_element_by_android_uiautomator(idMatches).click()

sleep(2)

# classNameMatches(".*xxx$")

classMatches = 'classNameMatches(".*TextView$").text("小说")'

driver.find_element_by_android_uiautomator(classMatches).click()

```

(0)

相关推荐

  • uiautomator2 ​元素定位

    表白:我听着你的笑话,笑着笑着就哭了 讲解对象: uiautomator2 元素定位  作者:融水公子 rsgz 元素定位方式1  text文本 import uiautomator2 as u2# ...

  • 使用selenium进行抓取网页的时候,通过 .text() 获取不到文本内容解决办法

    原创 楚岚 python3+selenium 2020/12/14 11:26 阅读数 773 本文被收录于专区 软件测试 进入专区参与更多专题讨论 selenium 获取不了标签文本的解决方法,通过 ...

  • 定位元素 | 白月黑羽教Python

    代码规则 点击这里,边看视频讲解,边学习以下内容 从示例代码,大家就可以发现,和Selenium Web自动化一样,要操作界面元素,必须先 定位(选择)元素. Appium是基于Selenium的,所 ...

  • appium

    文章目录 appium 1.appium可以测试的对象 2.自动化混合APP的条件 3.总结 4.查看webview版本 5.APP面试点 6.代码部分 方式1: 设置搜索webview 方式2: 输 ...

  • Appium+python自动化12-appium元素定位

    前言 appium定位app上的元素,可以通过id,name.class这些属性定位到 一.id定位 1.appium的id属性也就是通过UI Automator工具查看的resource-id属性 ...

  • appium+python自动化49-yaml管理定位元素

    前言 如何高效管理定位元素,这个是很有学问的问题,也是面试必问的[以下纯属个人观点,勿喷!]. 有的人用xml管理页面定位元素,这种逼格略高,但是小编认为学习成本大,贼麻烦. 有的人提到用excel管 ...

  • appium+python自动化50-生成定位对象模板templet(jinja2)

    前言 每次自己写pageobject定位元素对象太繁琐,格式都差不多,只是换个定位方法,这种就可以才有模板的方式,批量生成pageobject定位元素对象的模板 python里面生成模板有两个模块可以 ...

  • Appium+python自动化25-windows版appium_desktop_V1.7.1

    一. appium_desktop_v1.2.6 1.appium_desktop在github上最新下载地址:[releases/tag/v1.2.6](https://github.com/app ...

  • Appium+python自动化28-name定位

    前言 appium1.5以下老的版本是可以通过name定位的,新版本从1.5以后都不支持name定位了 一. name定位报错 1.最新版appium V1.7用name定位,报错: > sel ...

  • appium+python自动化30-list定位(find_elements)

    前言 有时候页面上没有id属性,并且其它的属性不唯一,平常用的比较多的是单数(element)的定位方法,遇到元素属性不唯一,就无法直接定位到了. 于是我们可以通过复数(elements)定位,先定位 ...

  • appium+python自动化31-android_uiautomator定位

    前言 appium的前身就是封装android的uiautomator这个框架来的,所以uiautomator的一些定位方法也可以用 一. text 1.通过text文本定位语法 > new U ...

  • appium+python自动化58-xpath定位

    基本属性定位 以淘宝app为例,定位左上角扫一扫按钮 1.可以通过text文本定位到 //*[@text='text文本属性'] # 定位text driver.find_element_by_xpa ...

  • appium+python自动化98-非select弹出选择框定位解决

    前言 遇到问题:document.getElementsByClassName(-)[0] is undefined 选择框如果是select标签的,可以直接用select专用的方法去定位点击操作.其 ...