• Appium-元素定位(Java篇)


    1.根据id来定位

      安卓里定位的Id一般为resource-id

      如果id唯一,就能定位到。如果到位不到,可以使用appium-desktop检查id是否唯一

    driver.findElementById("com.sankuai.meituan:id/weather_stub").click();

    2.根据name定位

      安卓里text属性认为是name

      由于findElementByName在appium版本1.5后就被废除了,需要使用xpath来定位text属性

    3.根据content-desc来定位

      安卓里content-desc属性认为是 AccessibilityId

    driver.findElementByAccessibilityId("附近").click();

    4.根据ClassName定位

      安卓里的class属性认为是ClassName

      

    driver.findElementsByClassName("android.widget.ImageButton")

    需要注意这种定位方式适用性不强,因为class的种类太少了,一个页面难免会有重复的,因此,要么你还能点击页面中的第一个这种classname,要么还是需要查找到该class的一个集合,然后通过下标去访问。

    driver.findElementsByClassName("android.widget.ImageButton").get(index).click();

    5.根据AndroidUiAutomator定位元素

      AndroidUIAutomator是一个强有力的元素定位方式,它是通过Android UIAutomator类库去找元素

      通过androidUIAutomator 又可以使用其中的 new UiSelector()…访问控件,例如:

    className( 即class属性)

    driver.findElementByAndroidUIAutomator("new UiSelector().className("android.widget.ImageButton")");

    description(即content-desc属性)

    driver.findElementByAndroidUIAutomator("new UiSelector().description("美食")")

    resourceId(即resource-id属性)

    driver.findElementByAndroidUIAutomator("new UiSelector().resourceId("com.sankuai.meituan:id/category")");

    text(即text属性)

    driver.findElementByAndroidUIAutomator("new UiSelector().text("登录")");

    如果同时需要添加两个以上条件,可以这样写:

    driver.findElementByAndroidUIAutomator("new UiSelector().text("登录").resourceId("com.sankuai.meituan:id/category")");

    6.根据xpath定位

      注意:虽然说xpah定位是万能的,几乎没有找不到的元素,但是建议能用以上的定位方式找到的控件,就尽量不用xpath,因为其查找效率会比较慢。

    当元素具有唯一性

    6.1 使用XPath根据text内容进行定位*

    由于findElementByName在appium版本1.5后就被废除了,因此想通过text来定位元素需要使用:

    driver.findElementByXPath("//*[@text='登录']").click();
    //表示在当前可视的整个布局文件中搜索某个控件的text属性的值为登录的控件

    或者更严谨一点:

    driver.findElementByXPath("//android.widget.Button[@text='登录']").click();
    //与上一行代码相比,多了一层限定条件(也就是标签名),查找效率会高些吧~

    或者你也可以只需模糊匹配即可:

    driver.findElementByXPath("//android.widget.TextView[contains(@text,'登')]").click();
     
    6.2 使用XPath根据resource-id定位
    List<WebElement> elements = driver.findElementsByXPath("//android.widget.TextView[@resource-id='com.sankuai.meituan:id/poi_name']");
    elements.get(1).click();//由于不是唯一的id,所以先将所有的id加到一个List中,这样表示点击了第二家店铺

    当然,如果resource-id是唯一的,那也可以这样写:

    driver.findElementByXPath("//android.widget.TextView[@resource-id='com.sankuai.meituan:id/poi_name']").click();
    6.3 使用xpath的绝对定位和相对定位

    如果以上的定位方式都无法定位就要考虑使用绝对定位或者相对定位了

    绝对定位就是从文档的根目录进行查找定位

    driver.findElementByXPath("//android.widget.FrameLayout/android.widget.ListView[1]/android.widget.LinearLayout[2]").click(); //需要注意这里的xpath定位下标是从1开始的

    相对定位就是先定位到一个比较容易定位到的元素,在相对于这个定位进行定位,

    driver.findElementByXPath("//android.widget.TextView[@text='优惠团购']/parent::android.widget.LinearLayout").click();//先定位一段文字再定位它的父亲
  • 相关阅读:
    cmd输入输出重定向
    【转载】标准输入输出、错误输出、重定向标准输出
    cmd 重定向
    Windows下cmd标准输入输出重定向
    Windows 命令行输入输出重定向问题
    MATLAB数值计算与符号运算
    选择排序法 冒泡排序法 本质上是对内存进行整理
    学习笔记:Monkey runner(一)
    Monkey test
    fiddler:快速标识接口
  • 原文地址:https://www.cnblogs.com/bugoobird/p/13797814.html
Copyright © 2020-2023  润新知