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

  • 相关阅读:
    nodejs安装autoprefixer
    nodejs安装Yui Compressor
    js捕捉回车事件
    支付宝服务窗前台页面规范
    html5 input type number 去掉加减号
    [USACO10HOL]赶小猪题解
    [USACO09FEB]改造路题解
    [HNOI2013]游走题解
    洛谷P1649 [USACO07OCT]障碍路线Obstacle Course BFS 最小转弯
    洛谷P1467 循环数 Runaround Numbers
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/7826631.html
Copyright © 2011-2022 走看看