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

Posted 上海-悠悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

在学习过程中有遇到疑问的,可以appium+python QQ群交流:330467341

以上是关于appium+python自动化30-list定位(find_elements)的主要内容,如果未能解决你的问题,请参考以下文章

Appium+Python 自动化-appium常用元素定位方法

Appium+Python 自动化-appium常用元素定位方法

Appium+Python 自动化-appium常用元素定位方法

appium+python搭建自动化测试框架_Appium元素定位

appium+python自动化28-name定位

Appium+Python 自动化-appium常用元素定位方法