zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    将python list数据结果存为html
    英文分词对比nltk vs spacy
    dict读取字典的第一个值-python
    分批查询数据库数据存入文件
    jupyter lab中显示gym的游戏动图
    模型融合
    读取csv中某列转为数字,顺序不变
    tensorflow和pytorch中的自定义网络层理解
    【小白刷题之路Day31】leetcode768. 最多能完成排序的块 II (动态规划、单调栈(没弄懂))
    【小白刷题之路Day31】leetcode769. 最多能完成排序的块(滑动窗口法、特殊使用、极致优化)
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/7826631.html
Copyright © 2011-2022 走看看