Appium 常用方法

来源:互联网 发布:jquery 删除二维数组 编辑:程序博客网 时间:2024/05/22 02:27

前提:获取控件信息使用uiautomatorviewer,在sdk的目录下D:\Android\sdk\tools\uiautomatorviewer.bat。


几种定位方法:

(1). 通过控件id

//返回泛型list
driver.findElementsById("控件的id"); 
//返回单个控件对象
driver.findElementById("控件id");


(2). 通过控件的类

//例如获取界面的EditText控件
//返回list
driver.findElementsByClassName("android.widget.EditText");

//返回单个控件对象,多个返回第一个
driver.findElementByClassName("android.widget.EditText");
driver.findElement(By.name("android.widget.EditText"));


(3). 通过坐标

这个返回不了控件,一般用来做滑动,或者点击某个坐标。

//从宽度的3/4 向左滑动到1/4,,  y轴是中间
public void swipeToLeft(int during) {
    int width = driver.manage().window().getSize().width;
    int height = driver.manage().window().getSize().height;
    driver.swipe(width * 3 / 4, height / 2, width / 4, height / 2, during);
}


(5). 通过Xpath

XPath是XML Path的简称(由于HTML文档本身就是一个标准的XML页面,所以我们可以使用XPath的语法来定位xml或者html页面元素) 
有兴趣的学一下: http://www.w3school.com.cn/xpath/ 

关于xpath这种定位方式,webdriver会将整个页面的所有控件进行扫描以定位我们所需要的控件,所以这是一个非常费时的操作,如果你的脚本中大量使用xpath做控件定位的话,将导致你的脚本执行速度降低,所以请慎用。

①. 绝对路径写法:
只有一种,使用右斜杠/
查找根元素的EditText: /android.widget.EditText
②. 相对路径
查找页面根控件://
查找页面上所有的EditText控件://android.widget.EditText
查找页面上第一个TextView控件://android.widget.TextView[1]
查找页面上id为login的控件://[@id=’login’]
查找页面上具有text属性为username的TextView控件://android.widget.TextView[@text=’username’]
查找页面上id为loginLayout的LinearLayout控件下的第一个TextView控件://android.widget.LinearLayout[@id=’loginLayout’]/TextView[1]
③. contains关键字
获取text里面包含保的TextView控件: driver.findElement(By.xpath(“//android.widget.TextView[contains(@text, ‘存’)]”));
④. start-with
获取text里面保开头的TextView控件: driver.findElement(By.xpath(“//android.widget.TextView[starts-with(@text, ‘保’)]));
⑤. text关键字
获取文本为保存的控件: driver.findElementByXPath(“.//*[@text=’保存’]”);


(5). 获取界面的XMl文件

driver.getPageSource();


其他常用方法:

1. 显示等待

AndroidDriverWait

2.隐式等待

driver.manage().timeouts().implicitlyWait(time, TimeUnit.SECONDS);
implicitlyWait() 不是休眠,是全局设置超时时间,在findelement或者findelements的时候,首先去找控件,如果没有找到,判断时间否超过implicitlyWait()设置了的时间,如果没有超过,则再次找这个元素,直到找到元素或者时间超过最大阀值。那我们就可以设定一个比较长的超时时间,但同时也不会让程序白白的等待。默认是250ms。

3. 线程超时

 Thread.sleep()


断言:

assertTrue:判断是否为True。

assertFalse:判断是否为false。

assertSame:判断引用地址是否相同。

assertNotSame:判断引用地址是否不相同。

assertNull:判断是否为null。

assertNotNull:判断是否不为null。

assertEquals:判断是否相等,Object类型的对象需要实现haseCode及equals方法。

assertNotEquals:判断是否不相等。

assertEqualsNoOrder:判断忽略顺序是否相等。

原创粉丝点击