• 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 


     

  • 相关阅读:
    Building a flexiable renderer
    Indirect Illumination in mental ray
    我的心情
    Cellular Automata
    Subsurface Scattering in mental ray
    Shader Types in mental ray
    BSP Traversal
    我的渲染器终于达到了MR的速度
    How to handle displacement and motion blur
    说明
  • 原文地址:https://www.cnblogs.com/WXBai/p/7599429.html
Copyright © 2020-2023  润新知