zoukankan      html  css  js  c++  java
  • APPIUM API整理(python)---元素查找

    最近在学习自动化框架appium,网上找一些API相关资料整理了一下

    1.find_element_by_id

    find_element_by_id(self, id_):

    Finds element within this element's children by ID(通过元素的ID定位元素)

    :Args: - id_ - ID of child element to locate.

    用法 driver. find_element_by_id(“id”)

    find_element_by_id方法,是对于那些有id而且可以互相区分的控件的操作使用,一般通过android sdk 的tools路径下的uiautomatorviewer.bat自带工具来获取,

    使用这个工具首先要确保前面环境配置ok,然后确定测试机器或android模拟器处于连接状态(cmd上输入adb devices),下面是使用uiautomatorviewer.bat工具

    获取resource-id

    代码举例:

    #点击天气应用
    driver.find_element_by_id('com.huawei.android.totemweather:id/mulan_widget_currentweather_smallicon').click()  

     2.find_element_by_xpath

    find_element_by_xpath(self, xpath):

    Finds element by xpath(通过Xpath定位元素,详细方法可参阅http://www.w3school.com.cn/xpath/ )

    ```
    :Args:
    
    xpath - xpath of element to locate. "//input[@class='myelement']"
    
    Note: The base path will be relative to this element's location.
    
    This will select the first link under this element.
    
    ::
    
    myelement.find_elements_by_xpath(".//a")
    
    However, this will select the first link on the page.
    
    ::
    
    myelement.find_elements_by_xpath("//a")
    ```

    用法 find_element_by_xpath(“//*”)

    find_element_by_xpath方法也需要使用uiautomatorviewer.bat工具来定位控件,如下图所示右边相机控件id为空,这时就需要使用xpath来定位元素了,

    我们可以使用xpath用text和index来定位元素,可以这样定位相机: 

    driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'相机')]")
    
    driver.find_element_by_xpath("//android.widget.TextView[contains(@index,8)]")

    如下图的图库那个控件index和天气温度控件是相同的,都是index=7,就只能用text或text与index结合了,如:

    driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'图库')]")
    
    driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'图库')and@index='7']")

    上面的代码就可以这样写 

    # -*-coding=utf-8 -*-
    
    from appium import webdriver
    import time
    desired_caps = {
    'platformName' : 'Android',
    'deviceName' : '76P4C15813005463',
    'platformVersion' : '5.1',
    #测试apk包名
    'appPackage' : 'com.huawei.android.launcher',
    #测试apk的launcherActivity
    'appActivity' : '.Launcher',
    }
    #进入android系统launcher
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
    time.sleep(5)
    #从launcher主界面进入相机应用并退出的两种方法
    driver.keyevent('3')
    #xpath使用text定位控件
    driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'相机')]").click()
    time.sleep(2)
    driver.keyevent('3')
    time.sleep(2)
    #xpath使用index定位控件
    driver.find_element_by_xpath("//android.widget.TextView[contains(@index,8)]").click()
    time.sleep(2)
    driver.keyevent('3')
    time.sleep(2)
    
    #从launcher主界面进入图库应用并退出的两种方法
    #xpath使用text定位控件
    driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'图库').click()
    time.sleep(2)
    driver.keyevent('3')
    time.sleep(2)
    #xpath使用text与index一起定位控件
    driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'图库')and@index='7']").click()
    time.sleep(5)
    driver.keyevent('3')
    time.sleep(2)
    
    driver.quit()

     3. find_element_by_name

    find_element_by_name(self, name):

    Finds element within this element's children by name【通过元素Name定位(元素的名称属性text)】

    :Args: - name - name property of the element to find.

     

    用法: driver.find_element_by_name(“name”)

    find_elements_by_name方法的控件元素也需要使用uiautomatorviewer.bat工具来定位,如上面例子中带有text信息的控件就可以直接使用,如

    driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'相机')]")
    
    driver.find_element_by_xpath("//android.widget.TextView[contains(@index,8)]") 

    可以使用

    driver.find_element_by_name('相机')

    脚本如下

    from appium import webdriver
    import time
    desired_caps = {
    'platformName' : 'Android',
    'deviceName' : '76P4C15813005463',
    'platformVersion' : '5.1',
    #测试apk包名
    'appPackage' : 'com.huawei.android.launcher',
    #测试apk的launcherActivity
    'appActivity' : '.Launcher',
    }
    #进入android系统launcher
    driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
    time.sleep(5)
    
    #name方法进入相机应用
    time.sleep(2)
    driver.find_element_by_name("相机").click()
    time.sleep(5)
    
    driver.quit()

     4. find_element_by_class_name

    find_element_by_class_name(self, name):

    Finds element within this element's children by class name(通过元素class name属性定位元素 )

    :Args: - name - class name to search for.

    用法 driver. find_element_by_class_name(“android.widget.LinearLayout”)

    find_element_by_class_name方法其实很不实用,一般控件的class基本相同,如下图上面的应用控件class都是android.widget.TextView,所以不好区分元素。

     5. find_element_by_link_text

    find_element_by_link_text(self, link_text):

    Finds element within this element's children by visible link text.
    通过元素可见链接文本定位
    :Args:
    - link_text - Link text string to search for.
    用法 driver.find_element_by_link_text(“text”)  

     

     6. find_elements_by_link_text

    find_element_by_link_text(self, link_text):

    Finds a list of elements within this element's children by visible link text
    通过元素可见链接文本定位,含有该属性的所有元素
    :Args:
    - link_text - Link text string to search for.
    用法 driver.find_elements_by_link_text(“text”)

     7. find_element_by_partial_link_text

    find_element_by_partial_link_text(self, link_text): 

     

     8. find_element_by_tag_name

    find_element_by_tag_name(self, name):

    Finds element within this element's children by tag name.
    通过查找html的标签名称定位元素
    :Args:
    - name - name of html tag (eg: h1, a, span)
    用法 driver.find_element_by_tag_name(“name”) 

    9. find_element_by_css_selector

    find_element_by_css_selector(self, css_selector):

    ‘Finds element within this element's children by CSS selector.
    通过CSS选择器定位元素
    :Args:
    - css_selector - CSS selctor string, ex: 'a.nav#home'  

    10. find_element_by_ios_uiautomation

    find_element_by_ios_uiautomation(self, uia_string): 

    Finds an element by uiautomation in iOS.
    通过iOS uiautomation查找元素
    :Args:
    - uia_string - The element name in the iOS UIAutomation library
    
    :Usage:
    driver.find_element_by_ios_uiautomation('.elements()[1].cells()[2]')
    用法dr. find_element_by_ios_uiautomation(‘elements’)  

     11. find_element_by_accessibility_id

    find_element_by_accessibility_id(self, id):

    Finds an element by accessibility id.
    通过accessibility id查找元素
    :Args:
    - id - a string corresponding to a recursive element search using the
    Id/Name that the native Accessibility options utilize
    
    :Usage:
    driver.find_element_by_accessibility_id()
    用法driver.find_element_by_accessibility_id(‘id’)

     

     

    学习地址:

    http://blog.csdn.net/bear_w/article/details/50330565

    http://blog.csdn.net/bear_w/article/details/50330565 


     

  • 相关阅读:
    处理MySQL的ibdata1文件过大问题
    关于mysql启动问题---mysqld_safe mysqld from pid file * ended
    mysql数据库指定ip远程访问
    关于access_log 日志文件以及ip、uv和pv的定义
    nginx配置及内核优化详解
    LN : leetcode 746 Min Cost Climbing Stairs
    LN : leetcode 684 Redundant Connection
    LN : leetcode 730 Count Different Palindromic Subsequences
    LN : leetcode 516 Longest Palindromic Subsequence
    LN : leetcode 215 Kth Largest Element in an Array
  • 原文地址:https://www.cnblogs.com/WXBai/p/7599429.html
Copyright © 2011-2022 走看看