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

前言

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

一、单数与复数
1.find_element开头的是13种单数定位

2.find_elements开头是13种复数定位

二、 定位一组对象
1.对比用单数定位find_element和复数定位find_elements定位元素的结果
```
# coding:utf-8
from appium import webdriver
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)

# 定位'搜索'按钮
search = driver.find_element_by_id("com.baidu.yuedu:id/tab_search")
print(search)  # 打印元素对象

searchs = driver.find_elements_by_id("com.baidu.yuedu:id/tab_search")
print(searchs)  # 打印list
print(type(searchs))
```
2.定位一组元素,返回的是list对象

3.定位一组之后,如果要点击该元素,那就先从list里面通过下标索引取出元素对象,再click就可以了。下标索引是从0开始。

```
# list定位
driver.find_elements_by_id("com.baidu.yuedu:id/tab_search")[0].click()
```

三、 元素不唯一

1.通常一个页面上id属性是唯一的,但是有时候会遇到有些元素没有id属性,只有class属性,通常class属性不唯一

2.如果要定位第一个图片元素,可以先用find_elements定位一组Image对象,再通过下标索引[0]取出第一个就可以了。
```
# 点搜索结果第一个
driver.find_elements_by_class_name("android.widget.Image")[0].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)

# 点'搜索'
driver.find_element_by_id("com.baidu.yuedu:id/tab_search").click()

# 输入"python"
driver.find_element_by_id("com.baidu.yuedu:id/full_text_search_bar_input").send_keys(u"Python接口")
sleep(2)
# 点搜索按钮
driver.find_element_by_id("com.baidu.yuedu:id/full_text_search_bar_search").click()

sleep(5)
# 点搜索结果第一个
driver.find_elements_by_class_name("android.widget.Image")[0].click()
```

(0)

相关推荐

  • appium

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

  • Python爬虫练习(三)

    文章目录 前言 一.隐藏cmd黑框 二.代码 1.引入库 2.登录 3.选择日期 4.选择人员 5.提交体温 6.主程序 总结 前言 使用selenium库模拟鼠标点击和键盘输入完成体温上报. 一.隐 ...

  • 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里面生成模板有两个模块可以 ...

  • Selenium2+python自动化45-18种定位方法(find_elements)

    前言 江湖传言,武林中流传八种定位,其中xpath是宝刀屠龙,css是倚天剑. 除了这八种,其实还有十种定位方法,眼看就快失传了,今天小编让失传已久的定位方法重出江湖! 一.十八种定位方法 前八种是大 ...

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

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

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

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

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

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

  • 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专用的方法去定位点击操作.其 ...