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是指当前父类下同名元素的序列,例如:
Appium获取元素的相关方法及问题记录_第1张图片

    上图中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提示:

不过好像只是通过xpath查找是否有包含该文字的元素,如果其他元素也含有要查找的文字应该也会被找到

wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[contains(@text,'"+ toast + "')]")))
//其中toast表示toast提示的文字,表示查找是否包含设置的toast文字

wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@text=\"+ toast + \")]")))
//这样应该表示内容文本必须相等。

你可能感兴趣的:(Appium)