Appium获取元素的相关方法及问题记录

以下是通过Java1.8,appium1.72,安卓5.0.2及安卓7.0

findElementById

    driver.findElementById("android:id/title"); 
    注:就是UIAutomatorViewer里面的resource-id

findElementByClassName

    driver.findElementByClassName("android.widget.TextView"); 

    注:classname重复的可能性比较大,所以我用得很少

findElementByAndroidUIAutomator

    driver.findElementByAndroidUIAutomator("new UiSelector().text(\"text\")");

    driver.findElementByAndroidUIAutomator("new UiSelector().text(\"text\").enable(true)");

    注:这个是根据元素的属性定位的,可以多个属性,但我试了resource-id提示不可用

findElementByAccessibilityId

     driver.findElementByAccessibilityId("text"); 

    //注:据说这个替代了以前的byname,下面是官方hub上的解释:
    该字符串相当于利用原生的可访问性(Accessibility)选项,使用 Id/Name 去递归地搜索元素。

findEelementByXPath

driver.findElementByXPath("//className[contains(@text,'text')]"); 
//在路径className查找text包含text的元素

driver.findElementByXPath("//className[@text='text']"); 
//在路径className查找text等于text的元素

driver.findElementByXPath("//*[@text='text']"); 
//这个是模糊查找,就是查找所有属性text='text'的元素

driver.findElement(By.xpath("//className[index]/className[index]"));
 
这个方法获取元素时index是指当前父类下同名元素的序列,例如:


    android.widget.RelativeLayout下面有两个android.widget.TextView,一个叫“验证码”一个叫“获取短信验证码”;
 获取元素“验证码”是:
//android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.TextView[1]

“    获取短信验证码”是:
//android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.TextView[2]

    获取“微博”是:
//android.widget.RelativeLayout[1]/android.widget.RelativeLayout[2]/android.widget.TextView[3]

    绝对地址(前面一根/)从哪里开始计算我也搞不懂,每次用相对地址(前面两根/),从要查找的元素开始往前推2-3级开始写地址。
    如果有多个相同属性的元素你没做区分,appium默认选择找到的第一个来使用。
    注:据说xpath定位较慢,我在5.0.2上感觉慢(有时候还是比较快,不知道是不是根路径和元素多少有关),在7.0上感觉还是挺快的。

getPageSource

获取页面源码,返回xml文件,里面包含所有元素(据说是这样,但实际不是这样);

我的5.0.2获取到的源码部分元素没有,没有的元素也无法定位,但是在UIAutomatorViewer中能正常找到;

7.0中获取到源码比5.0.2中获取到的更少,但是在7.0中都能定位,在UIAutomatorViewer中也能正常找到;

还不知道原因。

查找toast提示:

ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[contains(@text,'" + toast + "')]"))

其中toast表示toast提示的文字,表示查找是否包含设置的toast文字

ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@text=\" + toast + \")]"))

这样应该表示内容文本必须相等。


猜你喜欢

转载自blog.csdn.net/panda62/article/details/80017021